[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nCode that exhibits the behaviour you're reporting. If possible, provide us with a RunKit example. RunKit is a service that allows you to import npm packages, edit code in a notebook format, publish it, and have it be executable from your browser.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Environment configuration**\nWhether you're using Meyda in the browser or in Node (or another JS environment), version numbers for node/browser, Meyda version, any other relevant info about your environment.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Is your feature request for a new Audio Feature Extractor? Please link to relevant articles, formulae, information about usage, and implementations - as much information as possible**\n\nA list of sources for background reading on your requested Audio Feature Extractor\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question-other.md",
    "content": "---\nname: Question/Other\nabout: Got a question? Does your issue not fit into the above categories? This template\n  is for you\ntitle: ''\nlabels: question\nassignees: ''\n\n---\n\n__Write your question or issue with as much detail as possible__\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/showcase-application.md",
    "content": "---\nname: Showcase Application\nabout: Apply to have your project featured in Meyda's Showcase\ntitle: ''\nlabels: Showcase Request\nassignees: ''\n\n---\n\nHi! I'd like to be featured in Meyda's User Showcase. Here's a few sentences explaining why:\n\n...\n\nProject Name:\nProject Link:\nAuthor(s) Names (or preferred way to be referred to. Usernames/Handles/Anonymity are all fine):\nAuthor(s) Links:\nProject Description:\n\nProject Screenshots:\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATES/config.yml",
    "content": ""
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: npm\n    directory: \"/\"\n    schedule:\n      interval: daily\n    open-pull-requests-limit: 10\n    commit-message:\n      prefix: fix\n      prefix-development: chore\n      include: scope\n  - package-ecosystem: bundler\n    directory: \"/docs\"\n    schedule:\n      interval: daily\n    open-pull-requests-limit: 10\n    commit-message:\n      prefix: docs\n      prefix-development: docs\n      include: scope\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: build\non: [pull_request]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [\n            # Disabled because with typescript, the 10.x build fails by running out\n            # of heap space. I can't figure out how to increase heap size on the build\n            # but since we're dropping support for 10.x soon, I think this is fine.\n            # Tests still run on all the other versions, and we publish from 16.x now,\n            # so we I think we're fine to disable it for the next few releases.\n            # See you in 2035.\n            #\n            # https://github.com/meyda/meyda/pull/908/checks?check_run_id=3090204396\n            # 10.x,\n            18.x,\n            20.x,\n            21.x\n          ]\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Run install\n        run: npm install --ci\n\n      - name: Run build\n        run: npm run build\n\n      - name: Run test\n        run: npm run test\n"
  },
  {
    "path": ".github/workflows/commitlint.yml",
    "content": "name: Lint Commit Messages\non: [pull_request]\n\njobs:\n  commitlint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - uses: wagoid/commitlint-github-action@v6\n"
  },
  {
    "path": ".github/workflows/lint.yml",
    "content": "name: lint\non: [pull_request]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [21.x]\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Run install\n        run: npm install --ci\n\n      - name: Run lint\n        run: npm run lint\n"
  },
  {
    "path": ".github/workflows/merge-build.yml",
    "content": "name: merge-build\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [21.x]\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Run install\n        run: npm install --ci\n\n      - name: Run build\n        run: npm run build\n\n      - name: Run test\n        run: npm run test\n\n      - name: Semantic Release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n        run: ./node_modules/.bin/semantic-release\n"
  },
  {
    "path": ".husky/commit-msg",
    "content": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\n./node_modules/.bin/commitlint --edit \"$1\"\n"
  },
  {
    "path": ".husky/pre-commit",
    "content": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpm run lint\nnpx lint-staged\n"
  },
  {
    "path": ".npmignore",
    "content": "!dist\ndocs\n__tests__\n.travis.yml\n.github\nCODE_OF_CONDUCT.md\nrollup.config.js\ncoverage\n.husky\n.prettierignore\n.tsconfig.json\n"
  },
  {
    "path": ".npmrc",
    "content": "registry=https://registry.npmjs.org/\n"
  },
  {
    "path": ".prettierignore",
    "content": "node_modules\n.github\n.husky\ndist\n__tests__/data\n__tests__/TestData.ts\ndocs/node_modules\ndocs/assets\ndocs/_site\ndocs/.jekyll-cache\ndocs/_includes\ndocs/_layouts\ndocs/reference\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project, and in the interest of\nfostering an open and welcoming community, we pledge to respect all people who\ncontribute through reporting issues, posting feature requests, updating\ndocumentation, submitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project a harassment-free\nexperience for everyone, regardless of level of experience, gender, gender\nidentity and expression, sexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery\n- Personal attacks\n- Trolling or insulting/derogatory comments\n- Public or private harassment\n- Publishing other's private information, such as physical or electronic\n  addresses, without explicit permission\n- Other unethical or unprofessional conduct\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\nBy adopting this Code of Conduct, project maintainers commit themselves to\nfairly and consistently applying these principles to every aspect of managing\nthis project. Project maintainers who do not follow or enforce the Code of\nConduct may be permanently removed from the project team.\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting a project maintainer at hugh [at] codeoclock [dot] net. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. Maintainers are\nobligated to maintain confidentiality with regard to the reporter of an\nincident.\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 1.3.0, available at\n[http://contributor-covenant.org/version/1/3/0/][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/3/0/\n"
  },
  {
    "path": "LICENSE.md",
    "content": "# The MIT License (MIT)\n\nCopyright (c) 2014 Hugh A. Rawlinson, Nevo Segal, Jakub Fiala\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# meyda\n\n![Build Status][build-status-image]\n\nMeyda is a Javascript audio feature extraction library. Meyda supports both offline feature extraction as well as real-time feature extraction using the [Web Audio API][web-audio-api]. We wrote a paper about it, which is available [here][meyda-paper].\n\nWould you like your Meyda project to be featured in our [user showcase]? [Please let us know!](https://github.com/meyda/meyda/issues/new?assignees=&labels=Showcase+Request&template=showcase-application.md&title=)\n\nWant to ask questions, or chat about Meyda? Check out our [slack channel] on the Web Audio Slack Team. You'll need to [sign up here][web-audio-slack-team-signup] before you can join.\n\n[hughrawlinson][hugh-github] | [nevosegal][nevo-github] | [jakubfiala][jakub-github] | [2xAA][2xaa-github]\n\n### Usage\n\nPlease see [the documentation][docs] for setup and usage instructions.\n\n### Contributing\n\nPlease see [our contributor guidelines][contributing] for guidelines about contributing, and bear in mind that we adhere to the [Contributor Covenant][contributor-covenant]\n\n[build-status-image]: https://img.shields.io/github/checks-status/meyda/meyda/main\n[web-audio-api]: https://github.com/WebAudio/web-audio-api\n[meyda-paper]: https://wac.ircam.fr/pdf/wac15_submission_17.pdf\n[hugh-github]: https://github.com/hughrawlinson\n[nevo-github]: https://github.com/nevosegal\n[jakub-github]: https://github.com/jakubfiala\n[2xaa-github]: https://github.com/2xaa\n[contributing]: https://meyda.js.org/guides/contributing\n[contributor-covenant]: https://github.com/meyda/meyda/wiki/Contributor-Covenant\n[docs]: https://meyda.js.org/\n[slack channel]: https://web-audio.slack.com/messages/C51A03LBS/\n[web-audio-slack-team-signup]: https://web-audio-slackin.herokuapp.com/\n[user showcase]: https://meyda.js.org/showcase\n"
  },
  {
    "path": "__tests__/TestData.ts",
    "content": "/* eslint @typescript-eslint/no-loss-of-precision: 0 */\n// I want to reformat these arrays as tables but I have no idea how\n// to do it automatically, and I'm sure not doing it manually.\n\nvar validSignal = new Float32Array([\n  0.210053,\n  0.177877,\n  0.164105,\n  0.174483,\n  0.198507,\n  0.20863,\n  0.185864,\n  0.149152,\n  0.134373,\n  0.150244,\n  0.175646,\n  0.185254,\n  0.167029,\n  0.134828,\n  0.120649,\n  0.135059,\n  0.152342,\n  0.146518,\n  0.117914,\n  0.0850726,\n  0.0711188,\n  0.0831116,\n  0.0956098,\n  0.0790327,\n  0.0386703,\n  0.00368093,\n  -0.00425037,\n  0.01758,\n  0.0456599,\n  0.0422213,\n  0.0018336,\n  -0.0355098,\n  -0.0354277,\n  -0.00522628,\n  0.0238358,\n  0.0238101,\n  -0.00896865,\n  -0.0435429,\n  -0.0451826,\n  -0.0192383,\n  -0.000213783,\n  -0.0072255,\n  -0.0326651,\n  -0.0559957,\n  -0.0555821,\n  -0.0307709,\n  -0.0120282,\n  -0.0235698,\n  -0.0497144,\n  -0.0602726,\n  -0.0456664,\n  -0.0148111,\n  0.0133652,\n  0.0170683,\n  -0.00243172,\n  -0.0136483,\n  0.00683369,\n  0.0461872,\n  0.0739733,\n  0.0715558,\n  0.0445791,\n  0.0201561,\n  0.0230904,\n  0.0475926,\n  0.0640758,\n  0.0537718,\n  0.0257536,\n  0.00576359,\n  0.0137561,\n  0.042704,\n  0.0628399,\n  0.0573935,\n  0.0416932,\n  0.0383675,\n  0.0519358,\n  0.0709064,\n  0.0770058,\n  0.0582382,\n  0.0266868,\n  0.00986234,\n  0.0160813,\n  0.0258315,\n  0.019729,\n  -0.00208688,\n  -0.0258508,\n  -0.0354935,\n  -0.0237033,\n  -0.00151217,\n  0.0104479,\n  0.00505008,\n  -0.00615324,\n  -0.0103148,\n  -0.00378875,\n  0.0100817,\n  0.0210761,\n  0.0179143,\n  0.00375283,\n  -0.00439698,\n  0.00246343,\n  0.0155962,\n  0.0232143,\n  0.0230499,\n  0.0195738,\n  0.0194644,\n  0.0281883,\n  0.0424282,\n  0.0505708,\n  0.0459622,\n  0.0333743,\n  0.0229521,\n  0.0232969,\n  0.0337038,\n  0.0411679,\n  0.034791,\n  0.0200176,\n  0.0104787,\n  0.0125863,\n  0.0219084,\n  0.0288187,\n  0.0271796,\n  0.0185851,\n  0.00814602,\n  0.00010769,\n  -0.00410729,\n  -0.00845905,\n  -0.0181532,\n  -0.0315387,\n  -0.0425157,\n  -0.0485562,\n  -0.0509943,\n  -0.0525175,\n  -0.0569078,\n  -0.0648728,\n  -0.0707186,\n  -0.0692475,\n  -0.0636362,\n  -0.061308,\n  -0.0663872,\n  -0.0786958,\n  -0.0932887,\n  -0.101306,\n  -0.099305,\n  -0.0946008,\n  -0.0954661,\n  -0.102402,\n  -0.110466,\n  -0.112303,\n  -0.102428,\n  -0.0862367,\n  -0.0770018,\n  -0.0791694,\n  -0.0844438,\n  -0.0842266,\n  -0.0770584,\n  -0.0681956,\n  -0.0662046,\n  -0.0726287,\n  -0.0776818,\n  -0.0738193,\n  -0.0649626,\n  -0.0572661,\n  -0.0527713,\n  -0.0523181,\n  -0.0530069,\n  -0.0482611,\n  -0.0390906,\n  -0.0356254,\n  -0.043084,\n  -0.0567773,\n  -0.0695831,\n  -0.0758914,\n  -0.0746767,\n  -0.0730654,\n  -0.0784022,\n  -0.0882514,\n  -0.0957163,\n  -0.0974575,\n  -0.0924076,\n  -0.0829959,\n  -0.0774842,\n  -0.0811269,\n  -0.0894263,\n  -0.0964565,\n  -0.101951,\n  -0.10749,\n  -0.113172,\n  -0.11888,\n  -0.12452,\n  -0.128645,\n  -0.128639,\n  -0.124067,\n  -0.118649,\n  -0.115934,\n  -0.114884,\n  -0.112186,\n  -0.106954,\n  -0.10164,\n  -0.0997993,\n  -0.10383,\n  -0.113101,\n  -0.121923,\n  -0.123055,\n  -0.117317,\n  -0.113413,\n  -0.114568,\n  -0.115077,\n  -0.111366,\n  -0.104934,\n  -0.0965366,\n  -0.0884383,\n  -0.0869267,\n  -0.0935031,\n  -0.100325,\n  -0.1003,\n  -0.0952662,\n  -0.0916667,\n  -0.0937288,\n  -0.100514,\n  -0.105195,\n  -0.0995115,\n  -0.0825775,\n  -0.0635737,\n  -0.0538227,\n  -0.0558786,\n  -0.0608032,\n  -0.0585483,\n  -0.0496366,\n  -0.0427656,\n  -0.0445796,\n  -0.055052,\n  -0.0673823,\n  -0.0719562,\n  -0.0654653,\n  -0.0541091,\n  -0.0467475,\n  -0.0468283,\n  -0.0487808,\n  -0.0425466,\n  -0.0265339,\n  -0.0126342,\n  -0.0123718,\n  -0.022114,\n  -0.0286979,\n  -0.0256131,\n  -0.0160068,\n  -0.00526088,\n  0.00134264,\n  0.00154443,\n  0.00483469,\n  0.0256667,\n  0.0613991,\n  0.092394,\n  0.107694,\n  0.11447,\n  0.122727,\n  0.136071,\n  0.153204,\n  0.166608,\n  0.165065,\n  0.148037,\n  0.132945,\n  0.137259,\n  0.155005,\n  0.165077,\n  0.161352,\n  0.156986,\n  0.163093,\n  0.180532,\n  0.204865,\n  0.225191,\n  0.22949,\n  0.219644,\n  0.211666,\n  0.218466,\n  0.236073,\n  0.24553,\n  0.232326,\n  0.204887,\n  0.184331,\n  0.18092,\n  0.190672,\n  0.202115,\n  0.198955,\n  0.174898,\n  0.148543,\n  0.144139,\n  0.160337,\n  0.174553,\n  0.171143,\n  0.152899,\n  0.13376,\n  0.128038,\n  0.136623,\n  0.14159,\n  0.126432,\n  0.0983383,\n  0.0779321,\n  0.0740726,\n  0.0785174,\n  0.0754532,\n  0.0533432,\n  0.0185456,\n  -0.0056379,\n  -0.00360204,\n  0.0148392,\n  0.0257646,\n  0.0124646,\n  -0.0202455,\n  -0.045171,\n  -0.0377004,\n  -0.00770286,\n  0.0103068,\n  -0.000772779,\n  -0.0270371,\n  -0.0454872,\n  -0.0421428,\n  -0.0207754,\n  -0.00473425,\n  -0.0142364,\n  -0.0405185,\n  -0.05827,\n  -0.0555856,\n  -0.0394355,\n  -0.0266644,\n  -0.0340385,\n  -0.0585364,\n  -0.0723941,\n  -0.0558309,\n  -0.0223699,\n  0.000482343,\n  -0.000267456,\n  -0.0157868,\n  -0.0208784,\n  0.00474627,\n  0.0481501,\n  0.0719419,\n  0.0588237,\n  0.0288848,\n  0.0127234,\n  0.0246608,\n  0.0537408,\n  0.068271,\n  0.0467811,\n  0.00954849,\n  -0.00377789,\n  0.0171299,\n  0.0491611,\n  0.0652267,\n  0.0543435,\n  0.0320568,\n  0.029578,\n  0.055131,\n  0.0812543,\n  0.0806456,\n  0.053999,\n  0.02228,\n  0.00938343,\n  0.0222486,\n  0.0382825,\n  0.029001,\n  -0.00349459,\n  -0.0316094,\n  -0.0354257,\n  -0.0158886,\n  0.0105391,\n  0.0209381,\n  0.00657669,\n  -0.0131035,\n  -0.0128786,\n  0.00808002,\n  0.0303607,\n  0.0363252,\n  0.0222121,\n  0.001955,\n  -0.00275888,\n  0.0130369,\n  0.030836,\n  0.0319413,\n  0.0178758,\n  0.00550592,\n  0.00869962,\n  0.0255403,\n  0.0408193,\n  0.0401646,\n  0.0234699,\n  0.00582221,\n  0.00269674,\n  0.0140874,\n  0.0254329,\n  0.0224041,\n  0.00511699,\n  -0.0106915,\n  -0.0105429,\n  0.00252097,\n  0.0139908,\n  0.0140592,\n  0.00385489,\n  -0.00722043,\n  -0.0103427,\n  -0.00763009,\n  -0.00922786,\n  -0.0203442,\n  -0.0365691,\n  -0.0497839,\n  -0.0555759,\n  -0.0560929,\n  -0.0562996,\n  -0.0596174,\n  -0.0667598,\n  -0.073583,\n  -0.0731928,\n  -0.0655504,\n  -0.0591449,\n  -0.0604797,\n  -0.0693413,\n  -0.0823657,\n  -0.0935218,\n  -0.0965494,\n  -0.0934511,\n  -0.0935731,\n  -0.100812,\n  -0.109499,\n  -0.112634,\n  -0.106653,\n  -0.0922115,\n  -0.077002,\n  -0.0707268,\n  -0.0726923,\n  -0.0726287,\n  -0.0650586,\n  -0.0546635,\n  -0.0487427,\n  -0.0508422,\n  -0.0580151,\n  -0.06137,\n  -0.0552217,\n  -0.0449878,\n  -0.0395081,\n  -0.0399968,\n  -0.0416351,\n  -0.0398412,\n  -0.0330693,\n  -0.0251293,\n  -0.0237558,\n  -0.0330045,\n  -0.0491153,\n  -0.0640765,\n  -0.0713467,\n  -0.0711243,\n  -0.0715761,\n  -0.0805191,\n  -0.0952137,\n  -0.104761,\n  -0.102692,\n  -0.0936894,\n  -0.0871804,\n  -0.0876623,\n  -0.0931927,\n  -0.0993491,\n  -0.102432,\n  -0.103029,\n  -0.106451,\n  -0.115241,\n  -0.124862,\n  -0.129781,\n  -0.128199,\n  -0.121359,\n  -0.11399,\n  -0.11134,\n  -0.111923,\n  -0.10881,\n  -0.0990765,\n  -0.0871665,\n  -0.0797417,\n  -0.0802897,\n  -0.0872773,\n  -0.0951172,\n  -0.0974329,\n  -0.0925392,\n  -0.0862979,\n  -0.0854679,\n  -0.0884219,\n  -0.0882209,\n  -0.0827227,\n  -0.0746967,\n  -0.066372,\n  -0.0607307,\n  -0.0619048,\n  -0.0687389,\n  -0.0749493,\n  -0.0774976,\n  -0.0776059,\n  -0.0767834,\n  -0.0784744,\n  -0.0856714,\n  -0.0927187,\n  -0.0899654,\n  -0.0773404,\n  -0.0639323,\n  -0.0570897,\n  -0.0585352,\n  -0.0654574,\n  -0.0704296,\n  -0.0670013,\n  -0.0595495,\n  -0.0602296,\n  -0.0729674,\n  -0.0877086,\n  -0.0920242,\n  -0.0831493,\n  -0.0688663,\n  -0.0591427,\n]);\n\nvar validAmpSpec = new Float32Array([\n  0.19665084779262543,\n  0.2347041368484497,\n  0.8820229172706604,\n  0.24657772481441498,\n  0.5405293107032776,\n  0.1720474362373352,\n  0.4865507185459137,\n  0.10723359882831573,\n  0.21100476384162903,\n  0.2224891483783722,\n  0.2123824954032898,\n  0.2276570349931717,\n  0.12126567959785461,\n  0.066037617623806,\n  0.0979113057255745,\n  0.05718739330768585,\n  0.06418971717357635,\n  0.07439148426055908,\n  0.059811681509017944,\n  0.05451417341828346,\n  0.04494194686412811,\n  0.053511425852775574,\n  0.028220178559422493,\n  0.0508715994656086,\n  0.027684783563017845,\n  0.055125508457422256,\n  0.07665202021598816,\n  0.024500979110598564,\n  0.07082470506429672,\n  0.04819667339324951,\n  0.033702537417411804,\n  0.04822755232453346,\n  0.029374826699495316,\n  0.04507448524236679,\n  0.060386642813682556,\n  0.10165651887655258,\n  0.03139510378241539,\n  0.047015901654958725,\n  0.025697000324726105,\n  0.028244679793715477,\n  0.02587614394724369,\n  0.025666840374469757,\n  0.024105869233608246,\n  0.023856936022639275,\n  0.02298814244568348,\n  0.022686418145895004,\n  0.022146806120872498,\n  0.021367959678173065,\n  0.021091477945446968,\n  0.02044217474758625,\n  0.019870873540639877,\n  0.01956181973218918,\n  0.019178330898284912,\n  0.01895197108387947,\n  0.018175866454839706,\n  0.018201783299446106,\n  0.017440032213926315,\n  0.019627967849373817,\n  0.016084877774119377,\n  0.015716033056378365,\n  0.01793968863785267,\n  0.018144676461815834,\n  0.015560757368803024,\n  0.015966320410370827,\n  0.015865841880440712,\n  0.01724650338292122,\n  0.02212366834282875,\n  0.01283203810453415,\n  0.002370527945458889,\n  0.020350787788629532,\n  0.004152496345341206,\n  0.01835423894226551,\n  0.017795231193304062,\n  0.015214941464364529,\n  0.01477932371199131,\n  0.012785752303898335,\n  0.01735319010913372,\n  0.014473535120487213,\n  0.01173403486609459,\n  0.012687225826084614,\n  0.010277103632688522,\n  0.008647308684885502,\n  0.004186284728348255,\n  0.013694271445274353,\n  0.021512459963560104,\n  0.13956978917121887,\n  0.03825224190950394,\n  0.10673661530017853,\n  0.017183126881718636,\n  0.05120223015546799,\n  0.04658796265721321,\n  0.01062155794352293,\n  0.015622202306985855,\n  0.017075074836611748,\n  0.01364621426910162,\n  0.015216752886772156,\n  0.019511371850967407,\n  0.011106664314866066,\n  0.014739356935024261,\n  0.010785780847072601,\n  0.009001226164400578,\n  0.010783134028315544,\n  0.012424162589013577,\n  0.01052388921380043,\n  0.015232899226248264,\n  0.012698809616267681,\n  0.01273293700069189,\n  0.013579973950982094,\n  0.010236277244985104,\n  0.012397444806993008,\n  0.009453014470636845,\n  0.010430392809212208,\n  0.011005212552845478,\n  0.009151102975010872,\n  0.012203438207507133,\n  0.009068693034350872,\n  0.009711087681353092,\n  0.008781732991337776,\n  0.008229474537074566,\n  0.010262145660817623,\n  0.010236688889563084,\n  0.010204239748418331,\n  0.008296496234834194,\n  0.010923029854893684,\n  0.00945588294416666,\n  0.011303017847239971,\n  0.00820787250995636,\n  0.012193659320473671,\n  0.006696794647723436,\n  0.012072503566741943,\n  0.006136278621852398,\n  0.009859058074653149,\n  0.008026177063584328,\n  0.009486223571002483,\n  0.008378936909139156,\n  0.010838311165571213,\n  0.009234151802957058,\n  0.010003417730331421,\n  0.0069491127505898476,\n  0.0085842190310359,\n  0.008667370304465294,\n  0.009399629198014736,\n  0.00894227996468544,\n  0.007868955843150616,\n  0.00740796560421586,\n  0.008399457670748234,\n  0.009870490059256554,\n  0.01123284175992012,\n  0.005783144850283861,\n  0.00897462759166956,\n  0.0062180436216294765,\n  0.0034215368796139956,\n  0.0074971625581383705,\n  0.006735298316925764,\n  0.006660213693976402,\n  0.007263282313942909,\n  0.008068612776696682,\n  0.007176463026553392,\n  0.007691658101975918,\n  0.00771364476531744,\n  0.007871231064200401,\n  0.007622267585247755,\n  0.00793878547847271,\n  0.007455659564584494,\n  0.00759520661085844,\n  0.00735881645232439,\n  0.007547167595475912,\n  0.007401882670819759,\n  0.007520320825278759,\n  0.007383257150650024,\n  0.0073102377355098724,\n  0.007291282992810011,\n  0.007268768269568682,\n  0.0071226442232728004,\n  0.007194608449935913,\n  0.0072617256082594395,\n  0.007123888004571199,\n  0.007138390094041824,\n  0.007114463020116091,\n  0.0071001239120960236,\n  0.007095871493220329,\n  0.007049843668937683,\n  0.007028147112578154,\n  0.007019645534455776,\n  0.006987142376601696,\n  0.006965840235352516,\n  0.006965469568967819,\n  0.006934246979653835,\n  0.006920137442648411,\n  0.006895418278872967,\n  0.006881091743707657,\n  0.006860425230115652,\n  0.006845660042017698,\n  0.006826385855674744,\n  0.006810335908085108,\n  0.006792010739445686,\n  0.006778267677873373,\n  0.0067602782510221004,\n  0.006741780322045088,\n  0.006730182096362114,\n  0.006709547247737646,\n  0.006696504540741444,\n  0.0066810110583901405,\n  0.0066679697483778,\n  0.0066535272635519505,\n  0.006640746723860502,\n  0.006627073045819998,\n  0.006614472717046738,\n  0.006601832341402769,\n  0.006589086726307869,\n  0.006576948799192905,\n  0.0065663158893585205,\n  0.006554600782692432,\n  0.006542955990880728,\n  0.006531682796776295,\n  0.006521271541714668,\n  0.006511314772069454,\n  0.006501263007521629,\n  0.006491524633020163,\n  0.0064818719401955605,\n  0.006473584100604057,\n  0.006464917212724686,\n  0.006453651934862137,\n  0.006447129882872105,\n  0.006438340060412884,\n  0.006433091592043638,\n  0.006421483587473631,\n  0.006416960619390011,\n  0.006405588239431381,\n  0.0064027863554656506,\n  0.006392698269337416,\n  0.00638605048879981,\n  0.006379866506904364,\n  0.006380920764058828,\n  0.006368506699800491,\n  0.006370063871145248,\n  0.006358082871884108,\n  0.006360414903610945,\n  0.006350744981318712,\n  0.006349365226924419,\n  0.006344451103359461,\n  0.006340163294225931,\n  0.006336219608783722,\n  0.006333556957542896,\n  0.0063298651948571205,\n  0.006326799280941486,\n  0.0063240863382816315,\n  0.006322585511952639,\n  0.006320611108094454,\n  0.006318414118140936,\n  0.006317055318504572,\n  0.006315510254353285,\n  0.006314756814390421,\n  0.0063149346970021725,\n  0.006312258541584015,\n  0.00631281454116106,\n]);\n\nvar validFFT = {\n  real: new Float32Array([\n    -0.19665084779262543,\n    -0.19752468168735504,\n    0.36683952808380127,\n    -0.2433284968137741,\n    0.48324400186538696,\n    -0.05727904662489891,\n    0.2585470974445343,\n    0.10665424913167953,\n    0.07199767976999283,\n    0.22096122801303864,\n    -0.07637365162372589,\n    -0.15345974266529083,\n    0.0073951175436377525,\n    0.018520567566156387,\n    0.02713807113468647,\n    0.029163897037506104,\n    0.03566587343811989,\n    -0.044555239379405975,\n    0.011641419492661953,\n    -0.006447592284530401,\n    0.011403278447687626,\n    -0.009334547445178032,\n    -0.0047442726790905,\n    -0.008093228563666344,\n    -0.019951220601797104,\n    -0.018373994156718254,\n    0.07639355957508087,\n    -0.011358998715877533,\n    0.03888266533613205,\n    0.0034968173131346703,\n    0.0070980144664645195,\n    -0.02688266895711422,\n    0.025376001372933388,\n    -0.043581705540418625,\n    0.03376776725053787,\n    -0.003065094817429781,\n    0.020791348069906235,\n    0.016667073592543602,\n    0.013580083847045898,\n    0.010121488012373447,\n    0.011874902062118053,\n    0.009539823047816753,\n    0.00959095824509859,\n    0.009431146085262299,\n    0.009135594591498375,\n    0.009086290374398232,\n    0.008232609368860722,\n    0.007974330335855484,\n    0.007991848513484001,\n    0.007485880516469479,\n    0.00723373144865036,\n    0.007032811176031828,\n    0.006953357253223658,\n    0.006927272770553827,\n    0.006759696640074253,\n    0.0064453016966581345,\n    0.006554528139531612,\n    0.008652739226818085,\n    0.004625708796083927,\n    0.005859009455889463,\n    0.006949464790523052,\n    -0.003223725827410817,\n    0.0045992592349648476,\n    0.002923077903687954,\n    0.002486512530595064,\n    0.0005761167849414051,\n    -0.0026042622048407793,\n    0.006519898306578398,\n    -0.0022269380278885365,\n    0.016397951170802116,\n    0.0001522246457170695,\n    0.011844188906252384,\n    0.012074699625372887,\n    0.003284972859546542,\n    0.011473655700683594,\n    0.0020412669982761145,\n    0.014012168161571026,\n    0.007358142640441656,\n    0.007261600811034441,\n    0.0038233932573348284,\n    0.007721417583525181,\n    0.004036695696413517,\n    0.0006298600928857923,\n    -0.010049507953226566,\n    0.0010332296369597316,\n    -0.07787133753299713,\n    0.02331184409558773,\n    0.08912429958581924,\n    0.01535407267510891,\n    0.041799306869506836,\n    0.04321489855647087,\n    0.007313059642910957,\n    0.010057803243398666,\n    0.01242067851126194,\n    0.009817083366215229,\n    0.010617588646709919,\n    0.01676148921251297,\n    0.002485822420567274,\n    0.0026900183875113726,\n    0.008226996287703514,\n    0.007060603704303503,\n    0.0077970316633582115,\n    0.009426608681678772,\n    0.007362358272075653,\n    0.0091349883005023,\n    0.00871466938406229,\n    0.0077154794707894325,\n    0.009411475621163845,\n    0.00595090864226222,\n    0.009597858414053917,\n    0.005629582796245813,\n    0.004851765930652618,\n    0.006783735007047653,\n    0.006945793516933918,\n    0.008454684168100357,\n    0.005890170112252235,\n    0.0053056590259075165,\n    0.006906349211931229,\n    0.005137230269610882,\n    0.007416581269353628,\n    0.006845252122730017,\n    0.006610281765460968,\n    0.0056885299272835255,\n    0.008585539646446705,\n    0.006960442289710045,\n    0.008162051439285278,\n    0.005645608529448509,\n    0.00855440367013216,\n    0.0040309131145477295,\n    0.008840540423989296,\n    0.003720984561368823,\n    0.006988272536545992,\n    0.006515841465443373,\n    0.007293523754924536,\n    0.006819248199462891,\n    0.006574138533324003,\n    0.006817225366830826,\n    0.007057804148644209,\n    0.004834975115954876,\n    0.007327443920075893,\n    0.007043471559882164,\n    0.008074653334915638,\n    0.0069845858961343765,\n    0.006871236953884363,\n    0.006475189700722694,\n    0.007664144970476627,\n    0.006187759805470705,\n    0.00864401925355196,\n    0.004271855112165213,\n    0.004158757161349058,\n    0.005097470711916685,\n    0.003043494187295437,\n    0.005848107393831015,\n    0.005845715757459402,\n    0.006285677198320627,\n    0.0064400541596114635,\n    0.007056203670799732,\n    0.006167156621813774,\n    0.00666792131960392,\n    0.006738143041729927,\n    0.007025711704045534,\n    0.006782619282603264,\n    0.006766937207430601,\n    0.006693252827972174,\n    0.006672648712992668,\n    0.006510886363685131,\n    0.006521802861243486,\n    0.00646448228508234,\n    0.006618787534534931,\n    0.006626246031373739,\n    0.006372587755322456,\n    0.006422026548534632,\n    0.006534790154546499,\n    0.00639765989035368,\n    0.006459202151745558,\n    0.006494620349258184,\n    0.006421111524105072,\n    0.006446992978453636,\n    0.006438942160457373,\n    0.006432001944631338,\n    0.006441065110266209,\n    0.006432574242353439,\n    0.00641908822581172,\n    0.006432970520108938,\n    0.0064155892468988895,\n    0.0064157661981880665,\n    0.006421670317649841,\n    0.006413833238184452,\n    0.006415552459657192,\n    0.006406727246940136,\n    0.006407492328435183,\n    0.006402577273547649,\n    0.006401305086910725,\n    0.006397162098437548,\n    0.006395534612238407,\n    0.006390783935785294,\n    0.006391157396137714,\n    0.0063867466524243355,\n    0.006378623656928539,\n    0.006381320301443338,\n    0.006373580079525709,\n    0.006372799631208181,\n    0.006369728595018387,\n    0.006369008217006922,\n    0.006365716923028231,\n    0.006364297121763229,\n    0.006361851468682289,\n    0.006360107567161322,\n    0.006357864011079073,\n    0.006355467718094587,\n    0.006353544071316719,\n    0.006352653261274099,\n    0.006350608076900244,\n    0.0063482532277703285,\n    0.006346206180751324,\n    0.006344705354422331,\n    0.006343318149447441,\n    0.006341894157230854,\n    0.006340099964290857,\n    0.006338686216622591,\n    0.006337993778288364,\n    0.006337002385407686,\n    0.006332934368401766,\n    0.006333628669381142,\n    0.006331718526780605,\n    0.006332730874419212,\n    0.006327662616968155,\n    0.0063288332894444466,\n    0.00632462790235877,\n    0.006326642353087664,\n    0.006322877481579781,\n    0.006321584805846214,\n    0.006320431362837553,\n    0.006325934082269669,\n    0.00631851376965642,\n    0.006324665620923042,\n    0.006316954270005226,\n    0.0063230418600142,\n    0.006317440420389175,\n    0.006319508887827396,\n    0.006318141706287861,\n    0.006316909100860357,\n    0.00631600059568882,\n    0.0063161407597362995,\n    0.006314966361969709,\n    0.006314364727586508,\n    0.006313743535429239,\n    0.006314222235232592,\n    0.00631408067420125,\n    0.006313348188996315,\n    0.006313388701528311,\n    0.0063129388727247715,\n    0.006313106510788202,\n    0.006314004771411419,\n    0.006311849225312471,\n    0.006312710233032703,\n    0.00631279731169343,\n    0.006312710233032703,\n    0.006311849225312471,\n    0.006314004771411419,\n    0.006313106510788202,\n    0.0063129388727247715,\n    0.006313388701528311,\n    0.006313348188996315,\n    0.00631408067420125,\n    0.006314222235232592,\n    0.006313743535429239,\n    0.006314364727586508,\n    0.006314966361969709,\n    0.0063161407597362995,\n    0.00631600059568882,\n    0.006316909100860357,\n    0.006318141706287861,\n    0.006319508887827396,\n    0.006317440420389175,\n    0.0063230418600142,\n    0.006316954270005226,\n    0.006324665620923042,\n    0.00631851376965642,\n    0.006325934082269669,\n    0.006320431362837553,\n    0.006321584805846214,\n    0.006322877481579781,\n    0.006326642353087664,\n    0.00632462790235877,\n    0.0063288332894444466,\n    0.006327662616968155,\n    0.006332730874419212,\n    0.006331718526780605,\n    0.006333628669381142,\n    0.006332934368401766,\n    0.006337002385407686,\n    0.006337993778288364,\n    0.006338686216622591,\n    0.006340099964290857,\n    0.006341894157230854,\n    0.006343318149447441,\n    0.006344705354422331,\n    0.006346206180751324,\n    0.0063482532277703285,\n    0.006350608076900244,\n    0.006352653261274099,\n    0.006353544071316719,\n    0.006355467718094587,\n    0.006357864011079073,\n    0.006360107567161322,\n    0.006361851468682289,\n    0.006364297121763229,\n    0.006365716923028231,\n    0.006369008217006922,\n    0.006369728595018387,\n    0.006372799631208181,\n    0.006373580079525709,\n    0.006381320301443338,\n    0.006378623656928539,\n    0.0063867466524243355,\n    0.006391157396137714,\n    0.006390783935785294,\n    0.006395534612238407,\n    0.006397162098437548,\n    0.006401305086910725,\n    0.006402577273547649,\n    0.006407492328435183,\n    0.006406727246940136,\n    0.006415552459657192,\n    0.006413833238184452,\n    0.006421670317649841,\n    0.0064157661981880665,\n    0.0064155892468988895,\n    0.006432970520108938,\n    0.00641908822581172,\n    0.006432574242353439,\n    0.006441065110266209,\n    0.006432001944631338,\n    0.006438942160457373,\n    0.006446992978453636,\n    0.006421111524105072,\n    0.006494620349258184,\n    0.006459202151745558,\n    0.00639765989035368,\n    0.006534790154546499,\n    0.006422026548534632,\n    0.006372587755322456,\n    0.006626246031373739,\n    0.006618787534534931,\n    0.00646448228508234,\n    0.006521802861243486,\n    0.006510886363685131,\n    0.006672648712992668,\n    0.006693252827972174,\n    0.006766937207430601,\n    0.006782619282603264,\n    0.007025711704045534,\n    0.006738143041729927,\n    0.00666792131960392,\n    0.006167156621813774,\n    0.007056203670799732,\n    0.0064400541596114635,\n    0.006285677198320627,\n    0.005845715757459402,\n    0.005848107393831015,\n    0.003043494187295437,\n    0.005097470711916685,\n    0.004158757161349058,\n    0.004271855112165213,\n    0.00864401925355196,\n    0.006187759805470705,\n    0.007664144970476627,\n    0.006475189700722694,\n    0.006871236953884363,\n    0.0069845858961343765,\n    0.008074653334915638,\n    0.007043471559882164,\n    0.007327443920075893,\n    0.004834975115954876,\n    0.007057804148644209,\n    0.006817225366830826,\n    0.006574138533324003,\n    0.006819248199462891,\n    0.007293523754924536,\n    0.006515841465443373,\n    0.006988272536545992,\n    0.003720984561368823,\n    0.008840540423989296,\n    0.0040309131145477295,\n    0.00855440367013216,\n    0.005645608529448509,\n    0.008162051439285278,\n    0.006960442289710045,\n    0.008585539646446705,\n    0.0056885299272835255,\n    0.006610281765460968,\n    0.006845252122730017,\n    0.007416581269353628,\n    0.005137230269610882,\n    0.006906349211931229,\n    0.0053056590259075165,\n    0.005890170112252235,\n    0.008454684168100357,\n    0.006945793516933918,\n    0.006783735007047653,\n    0.004851765930652618,\n    0.005629582796245813,\n    0.009597858414053917,\n    0.00595090864226222,\n    0.009411475621163845,\n    0.0077154794707894325,\n    0.00871466938406229,\n    0.0091349883005023,\n    0.007362358272075653,\n    0.009426608681678772,\n    0.0077970316633582115,\n    0.007060603704303503,\n    0.008226996287703514,\n    0.0026900183875113726,\n    0.002485822420567274,\n    0.01676148921251297,\n    0.010617588646709919,\n    0.009817083366215229,\n    0.01242067851126194,\n    0.010057803243398666,\n    0.007313059642910957,\n    0.04321489855647087,\n    0.041799306869506836,\n    0.01535407267510891,\n    0.08912429958581924,\n    0.02331184409558773,\n    -0.07787133753299713,\n    0.0010332296369597316,\n    -0.010049507953226566,\n    0.0006298600928857923,\n    0.004036695696413517,\n    0.007721417583525181,\n    0.0038233932573348284,\n    0.007261600811034441,\n    0.007358142640441656,\n    0.014012168161571026,\n    0.0020412669982761145,\n    0.011473655700683594,\n    0.003284972859546542,\n    0.012074699625372887,\n    0.011844188906252384,\n    0.0001522246457170695,\n    0.016397951170802116,\n    -0.0022269380278885365,\n    0.006519898306578398,\n    -0.0026042622048407793,\n    0.0005761167849414051,\n    0.002486512530595064,\n    0.002923077903687954,\n    0.0045992592349648476,\n    -0.003223725827410817,\n    0.006949464790523052,\n    0.005859009455889463,\n    0.004625708796083927,\n    0.008652739226818085,\n    0.006554528139531612,\n    0.0064453016966581345,\n    0.006759696640074253,\n    0.006927272770553827,\n    0.006953357253223658,\n    0.007032811176031828,\n    0.00723373144865036,\n    0.007485880516469479,\n    0.007991848513484001,\n    0.007974330335855484,\n    0.008232609368860722,\n    0.009086290374398232,\n    0.009135594591498375,\n    0.009431146085262299,\n    0.00959095824509859,\n    0.009539823047816753,\n    0.011874902062118053,\n    0.010121488012373447,\n    0.013580083847045898,\n    0.016667073592543602,\n    0.020791348069906235,\n    -0.003065094817429781,\n    0.03376776725053787,\n    -0.043581705540418625,\n    0.025376001372933388,\n    -0.02688266895711422,\n    0.0070980144664645195,\n    0.0034968173131346703,\n    0.03888266533613205,\n    -0.011358998715877533,\n    0.07639355957508087,\n    -0.018373994156718254,\n    -0.019951220601797104,\n    -0.008093228563666344,\n    -0.0047442726790905,\n    -0.009334547445178032,\n    0.011403278447687626,\n    -0.006447592284530401,\n    0.011641419492661953,\n    -0.044555239379405975,\n    0.03566587343811989,\n    0.029163897037506104,\n    0.02713807113468647,\n    0.018520567566156387,\n    0.0073951175436377525,\n    -0.15345974266529083,\n    -0.07637365162372589,\n    0.22096122801303864,\n    0.07199767976999283,\n    0.10665424913167953,\n    0.2585470974445343,\n    -0.05727904662489891,\n    0.48324400186538696,\n    -0.2433284968137741,\n    0.36683952808380127,\n    -0.19752468168735504,\n  ]),\n  imag: new Float32Array([\n    0,\n    -0.12676763534545898,\n    0.8021179437637329,\n    -0.039897620677948,\n    0.2421717494726181,\n    -0.1622326523065567,\n    0.41217106580734253,\n    -0.01113172434270382,\n    0.1983414888381958,\n    0.02602989412844181,\n    0.19817514717578888,\n    0.16816014051437378,\n    0.121039979159832,\n    0.06338734179735184,\n    0.09407523274421692,\n    0.049192123115062714,\n    0.05336914211511612,\n    0.059572841972112656,\n    0.058667831122875214,\n    0.05413154140114784,\n    0.04347118362784386,\n    0.05269097536802292,\n    0.027818525210022926,\n    0.0502236932516098,\n    -0.01919364556670189,\n    0.051973242312669754,\n    0.006289381068199873,\n    0.02170877903699875,\n    0.05919693410396576,\n    0.048069652169942856,\n    0.03294661268591881,\n    0.04004021733999252,\n    0.014796585775911808,\n    -0.0115040959790349,\n    0.05006280541419983,\n    0.10161030292510986,\n    0.02352386899292469,\n    0.04396252706646919,\n    0.021815525367856026,\n    0.026368871331214905,\n    0.02299046702682972,\n    0.02382810227572918,\n    0.02211575023829937,\n    0.021913623437285423,\n    0.021094918251037598,\n    0.020787324756383896,\n    0.020559795200824738,\n    0.01982422173023224,\n    0.01951872929930687,\n    0.019022200256586075,\n    0.018507424741983414,\n    0.018253885209560394,\n    0.01787342131137848,\n    0.017640581354498863,\n    0.01687212474644184,\n    0.017022427171468735,\n    0.016161462292075157,\n    0.017617810517549515,\n    0.015405392274260521,\n    0.014583062380552292,\n    0.016538964584469795,\n    0.01785600371658802,\n    0.014865529723465443,\n    0.015696464106440544,\n    0.01566978543996811,\n    0.017236877232789993,\n    0.021969854831695557,\n    -0.011052245274186134,\n    -0.000812496233265847,\n    0.012052458710968494,\n    0.004149705171585083,\n    0.014021171256899834,\n    0.013071797788143158,\n    0.01485608983784914,\n    0.009315772913396358,\n    0.01262175478041172,\n    0.010236813686788082,\n    0.01246358547359705,\n    0.009217197075486183,\n    0.012097411789000034,\n    0.006782224867492914,\n    0.007647289894521236,\n    0.004138629883527756,\n    0.009302712976932526,\n    -0.021487632766366005,\n    -0.11582650989294052,\n    0.030328072607517242,\n    -0.05873299390077591,\n    -0.007714421022683382,\n    0.029571712017059326,\n    0.017404330894351006,\n    0.007703028153628111,\n    0.011953819543123245,\n    0.011716864071786404,\n    0.009478610008955002,\n    0.010900292545557022,\n    0.009987298399209976,\n    0.01082491036504507,\n    0.01449180580675602,\n    0.006974926218390465,\n    0.0055830045603215694,\n    0.007448642048984766,\n    0.008093137294054031,\n    0.007519835140556097,\n    0.012189880944788456,\n    0.009236574172973633,\n    0.010129119269549847,\n    0.009789781644940376,\n    0.008328748866915703,\n    0.007847148925065994,\n    0.007593897171318531,\n    0.009233280085027218,\n    0.008665774017572403,\n    0.005958073772490025,\n    0.008800125680863857,\n    0.00689544016495347,\n    0.008133584633469582,\n    0.00542412931099534,\n    0.0064290836453437805,\n    0.007092669606208801,\n    0.007611329201608896,\n    0.007773717865347862,\n    0.006039245054125786,\n    0.006752858404070139,\n    0.006400465499609709,\n    0.007819151505827904,\n    0.005957874469459057,\n    0.008689505979418755,\n    0.005347784608602524,\n    0.008221324533224106,\n    0.004879363812506199,\n    0.006954500451683998,\n    0.004686504602432251,\n    0.00606571976095438,\n    0.004868720658123493,\n    0.008616825565695763,\n    0.006228562910109758,\n    0.007089129649102688,\n    0.004991310648620129,\n    0.004471842665225267,\n    0.005051021464169025,\n    0.004811757244169712,\n    0.005583899561315775,\n    0.003834914183244109,\n    0.003598593408241868,\n    0.003436826402321458,\n    0.007690136320888996,\n    0.007173399440944195,\n    0.003898206865414977,\n    0.00795290432870388,\n    0.003560879034921527,\n    0.0015633482253178954,\n    0.004691171459853649,\n    0.0033454219810664654,\n    0.002201977651566267,\n    0.003358715446665883,\n    0.003913119900971651,\n    0.00366985029540956,\n    0.0038341134786605835,\n    0.003754695877432823,\n    0.003549035172909498,\n    0.0034777927212417126,\n    0.004151250701397657,\n    0.0032843907829374075,\n    0.0036280741915106773,\n    0.0034293641801923513,\n    0.0037981343921273947,\n    0.003605320118367672,\n    0.0035702765453606844,\n    0.0032565852161496878,\n    0.003581857308745384,\n    0.003452590899541974,\n    0.0031830030493438244,\n    0.0031308161560446024,\n    0.003168769646435976,\n    0.003248471301048994,\n    0.0030853047501295805,\n    0.003064783290028572,\n    0.0030258235055953264,\n    0.003006843850016594,\n    0.0029772589914500713,\n    0.0028848371002823114,\n    0.002861845539882779,\n    0.002809325698763132,\n    0.002767738187685609,\n    0.0027130928356200457,\n    0.0026981316041201353,\n    0.0026356265880167484,\n    0.002594029763713479,\n    0.0025496354792267084,\n    0.0025086775422096252,\n    0.0024642320349812508,\n    0.002426180988550186,\n    0.0023824062664061785,\n    0.0023404727689921856,\n    0.002299846149981022,\n    0.002257879124954343,\n    0.002216038526967168,\n    0.002182832919061184,\n    0.002138714771717787,\n    0.0020965454168617725,\n    0.0020568417385220528,\n    0.002015555975958705,\n    0.0019742229487746954,\n    0.0019357356941327453,\n    0.001896112342365086,\n    0.0018560552271082997,\n    0.0018166668014600873,\n    0.001778132515028119,\n    0.0017389915883541107,\n    0.0016996278427541256,\n    0.001661416026763618,\n    0.0016225191066041589,\n    0.0015842837747186422,\n    0.001545493258163333,\n    0.0015072152018547058,\n    0.001469536335207522,\n    0.0014306644443422556,\n    0.001393923768773675,\n    0.0013548876158893108,\n    0.0013180007226765156,\n    0.0012796694645658135,\n    0.0012424042215570807,\n    0.0012044224422425032,\n    0.0011668613879010081,\n    0.0011318946490064263,\n    0.0010936807375401258,\n    0.001059835427440703,\n    0.00101520586758852,\n    0.000984514714218676,\n    0.0009422375005669892,\n    0.0009051006054505706,\n    0.0008688165689818561,\n    0.000835888902656734,\n    0.0007964043179526925,\n    0.0007591552566736937,\n    0.0007220158004201949,\n    0.0006884903414174914,\n    0.000649545225314796,\n    0.000615015160292387,\n    0.0005771868163719773,\n    0.0005425234558060765,\n    0.0005057844682596624,\n    0.00046936928993090987,\n    0.00043404396274127066,\n    0.0003964655043091625,\n    0.00036154271219857037,\n    0.00032509685843251646,\n    0.0002872466866392642,\n    0.0002529642661102116,\n    0.0002152013621525839,\n    0.00018019504204858094,\n    0.00014435929188039154,\n    0.00010835941066034138,\n    0.00007186409493442625,\n    0.00003627773548942059,\n    0,\n    -0.00003627773548942059,\n    -0.00007186409493442625,\n    -0.00010835941066034138,\n    -0.00014435929188039154,\n    -0.00018019504204858094,\n    -0.0002152013621525839,\n    -0.0002529642661102116,\n    -0.0002872466866392642,\n    -0.00032509685843251646,\n    -0.00036154271219857037,\n    -0.0003964655043091625,\n    -0.00043404396274127066,\n    -0.00046936928993090987,\n    -0.0005057844682596624,\n    -0.0005425234558060765,\n    -0.0005771868163719773,\n    -0.000615015160292387,\n    -0.000649545225314796,\n    -0.0006884903414174914,\n    -0.0007220158004201949,\n    -0.0007591552566736937,\n    -0.0007964043179526925,\n    -0.000835888902656734,\n    -0.0008688165689818561,\n    -0.0009051006054505706,\n    -0.0009422375005669892,\n    -0.000984514714218676,\n    -0.00101520586758852,\n    -0.001059835427440703,\n    -0.0010936807375401258,\n    -0.0011318946490064263,\n    -0.0011668613879010081,\n    -0.0012044224422425032,\n    -0.0012424042215570807,\n    -0.0012796694645658135,\n    -0.0013180007226765156,\n    -0.0013548876158893108,\n    -0.001393923768773675,\n    -0.0014306644443422556,\n    -0.001469536335207522,\n    -0.0015072152018547058,\n    -0.001545493258163333,\n    -0.0015842837747186422,\n    -0.0016225191066041589,\n    -0.001661416026763618,\n    -0.0016996278427541256,\n    -0.0017389915883541107,\n    -0.001778132515028119,\n    -0.0018166668014600873,\n    -0.0018560552271082997,\n    -0.001896112342365086,\n    -0.0019357356941327453,\n    -0.0019742229487746954,\n    -0.002015555975958705,\n    -0.0020568417385220528,\n    -0.0020965454168617725,\n    -0.002138714771717787,\n    -0.002182832919061184,\n    -0.002216038526967168,\n    -0.002257879124954343,\n    -0.002299846149981022,\n    -0.0023404727689921856,\n    -0.0023824062664061785,\n    -0.002426180988550186,\n    -0.0024642320349812508,\n    -0.0025086775422096252,\n    -0.0025496354792267084,\n    -0.002594029763713479,\n    -0.0026356265880167484,\n    -0.0026981316041201353,\n    -0.0027130928356200457,\n    -0.002767738187685609,\n    -0.002809325698763132,\n    -0.002861845539882779,\n    -0.0028848371002823114,\n    -0.0029772589914500713,\n    -0.003006843850016594,\n    -0.0030258235055953264,\n    -0.003064783290028572,\n    -0.0030853047501295805,\n    -0.003248471301048994,\n    -0.003168769646435976,\n    -0.0031308161560446024,\n    -0.0031830030493438244,\n    -0.003452590899541974,\n    -0.003581857308745384,\n    -0.0032565852161496878,\n    -0.0035702765453606844,\n    -0.003605320118367672,\n    -0.0037981343921273947,\n    -0.0034293641801923513,\n    -0.0036280741915106773,\n    -0.0032843907829374075,\n    -0.004151250701397657,\n    -0.0034777927212417126,\n    -0.003549035172909498,\n    -0.003754695877432823,\n    -0.0038341134786605835,\n    -0.00366985029540956,\n    -0.003913119900971651,\n    -0.003358715446665883,\n    -0.002201977651566267,\n    -0.0033454219810664654,\n    -0.004691171459853649,\n    -0.0015633482253178954,\n    -0.003560879034921527,\n    -0.00795290432870388,\n    -0.003898206865414977,\n    -0.007173399440944195,\n    -0.007690136320888996,\n    -0.003436826402321458,\n    -0.003598593408241868,\n    -0.003834914183244109,\n    -0.005583899561315775,\n    -0.004811757244169712,\n    -0.005051021464169025,\n    -0.004471842665225267,\n    -0.004991310648620129,\n    -0.007089129649102688,\n    -0.006228562910109758,\n    -0.008616825565695763,\n    -0.004868720658123493,\n    -0.00606571976095438,\n    -0.004686504602432251,\n    -0.006954500451683998,\n    -0.004879363812506199,\n    -0.008221324533224106,\n    -0.005347784608602524,\n    -0.008689505979418755,\n    -0.005957874469459057,\n    -0.007819151505827904,\n    -0.006400465499609709,\n    -0.006752858404070139,\n    -0.006039245054125786,\n    -0.007773717865347862,\n    -0.007611329201608896,\n    -0.007092669606208801,\n    -0.0064290836453437805,\n    -0.00542412931099534,\n    -0.008133584633469582,\n    -0.00689544016495347,\n    -0.008800125680863857,\n    -0.005958073772490025,\n    -0.008665774017572403,\n    -0.009233280085027218,\n    -0.007593897171318531,\n    -0.007847148925065994,\n    -0.008328748866915703,\n    -0.009789781644940376,\n    -0.010129119269549847,\n    -0.009236574172973633,\n    -0.012189880944788456,\n    -0.007519835140556097,\n    -0.008093137294054031,\n    -0.007448642048984766,\n    -0.0055830045603215694,\n    -0.006974926218390465,\n    -0.01449180580675602,\n    -0.01082491036504507,\n    -0.009987298399209976,\n    -0.010900292545557022,\n    -0.009478610008955002,\n    -0.011716864071786404,\n    -0.011953819543123245,\n    -0.007703028153628111,\n    -0.017404330894351006,\n    -0.029571712017059326,\n    0.007714421022683382,\n    0.05873299390077591,\n    -0.030328072607517242,\n    0.11582650989294052,\n    0.021487632766366005,\n    -0.009302712976932526,\n    -0.004138629883527756,\n    -0.007647289894521236,\n    -0.006782224867492914,\n    -0.012097411789000034,\n    -0.009217197075486183,\n    -0.01246358547359705,\n    -0.010236813686788082,\n    -0.01262175478041172,\n    -0.009315772913396358,\n    -0.01485608983784914,\n    -0.013071797788143158,\n    -0.014021171256899834,\n    -0.004149705171585083,\n    -0.012052458710968494,\n    0.000812496233265847,\n    0.011052245274186134,\n    -0.021969854831695557,\n    -0.017236877232789993,\n    -0.01566978543996811,\n    -0.015696464106440544,\n    -0.014865529723465443,\n    -0.01785600371658802,\n    -0.016538964584469795,\n    -0.014583062380552292,\n    -0.015405392274260521,\n    -0.017617810517549515,\n    -0.016161462292075157,\n    -0.017022427171468735,\n    -0.01687212474644184,\n    -0.017640581354498863,\n    -0.01787342131137848,\n    -0.018253885209560394,\n    -0.018507424741983414,\n    -0.019022200256586075,\n    -0.01951872929930687,\n    -0.01982422173023224,\n    -0.020559795200824738,\n    -0.020787324756383896,\n    -0.021094918251037598,\n    -0.021913623437285423,\n    -0.02211575023829937,\n    -0.02382810227572918,\n    -0.02299046702682972,\n    -0.026368871331214905,\n    -0.021815525367856026,\n    -0.04396252706646919,\n    -0.02352386899292469,\n    -0.10161030292510986,\n    -0.05006280541419983,\n    0.0115040959790349,\n    -0.014796585775911808,\n    -0.04004021733999252,\n    -0.03294661268591881,\n    -0.048069652169942856,\n    -0.05919693410396576,\n    -0.02170877903699875,\n    -0.006289381068199873,\n    -0.051973242312669754,\n    0.01919364556670189,\n    -0.0502236932516098,\n    -0.027818525210022926,\n    -0.05269097536802292,\n    -0.04347118362784386,\n    -0.05413154140114784,\n    -0.058667831122875214,\n    -0.059572841972112656,\n    -0.05336914211511612,\n    -0.049192123115062714,\n    -0.09407523274421692,\n    -0.06338734179735184,\n    -0.121039979159832,\n    -0.16816014051437378,\n    -0.19817514717578888,\n    -0.02602989412844181,\n    -0.1983414888381958,\n    0.01113172434270382,\n    -0.41217106580734253,\n    0.1622326523065567,\n    -0.2421717494726181,\n    0.039897620677948,\n    -0.8021179437637329,\n    0.12676763534545898,\n  ]),\n  length: 512,\n};\n\nvar expectedPowerSpectrumOutput = new Float32Array([\n  0.03867155686020851,\n  0.055086031556129456,\n  0.7779644131660461,\n  0.06080057471990585,\n  0.2921719253063202,\n  0.029600320383906364,\n  0.2367316037416458,\n  0.011499044485390186,\n  0.04452301189303398,\n  0.04950142279267311,\n  0.045106325298547745,\n  0.051827725023031235,\n  0.014705364592373371,\n  0.0043609668500721455,\n  0.00958662386983633,\n  0.0032703978940844536,\n  0.004120319616049528,\n  0.0055340928956866264,\n  0.003577437251806259,\n  0.002971795154735446,\n  0.0020197785925120115,\n  0.002863472793251276,\n  0.0007963784737512469,\n  0.0025879195891320705,\n  0.0007664472213946283,\n  0.003038821741938591,\n  0.005875532049685717,\n  0.0006002979935146868,\n  0.005016138777136803,\n  0.0023229194339364767,\n  0.0011358610354363918,\n  0.0023258968722075224,\n  0.0008628804353065789,\n  0.002031709300354123,\n  0.0036465467419475317,\n  0.010334047488868237,\n  0.0009856525575742126,\n  0.002210495062172413,\n  0.0006603358197025955,\n  0.0007977619534358382,\n  0.0006695748306810856,\n  0.0006587866810150445,\n  0.0005810929578728974,\n  0.000569153402466327,\n  0.0005284546641632915,\n  0.0005146735929884017,\n  0.0004904810339212418,\n  0.00045658971066586673,\n  0.00044485044782049954,\n  0.00041788251837715507,\n  0.00039485160959884524,\n  0.0003826647880487144,\n  0.0003678083885461092,\n  0.00035917721106670797,\n  0.0003303621197119355,\n  0.00033130490919575095,\n  0.0003041547315660864,\n  0.0003852571244351566,\n  0.0002587233029771596,\n  0.00024699370260350406,\n  0.0003218324272893369,\n  0.0003292292822152376,\n  0.00024213717551901937,\n  0.00025492339045740664,\n  0.0002517249376978725,\n  0.00029744187486357987,\n  0.0004894566955044866,\n  0.00016466120723634958,\n  0.000005619402600132162,\n  0.00041415455052629113,\n  0.000017243226466234773,\n  0.00033687808900140226,\n  0.0003166702517773956,\n  0.0002314944431418553,\n  0.00021842840942554176,\n  0.00016347545897588134,\n  0.0003011332009918988,\n  0.0002094832161674276,\n  0.0001376875734422356,\n  0.00016096570470836014,\n  0.00010561885574134067,\n  0.00007477594772353768,\n  0.000017524980648886412,\n  0.00018753306358121336,\n  0.0004627859452739358,\n  0.019479725509881973,\n  0.0014632339589297771,\n  0.011392705142498016,\n  0.0002952598442789167,\n  0.002621668390929699,\n  0.00217043817974627,\n  0.00011281749175395817,\n  0.0002440532116452232,\n  0.00029155818629078567,\n  0.00018621915660332888,\n  0.00023154956579674035,\n  0.00038069364381954074,\n  0.00012335799692664295,\n  0.00021724864200223237,\n  0.00011633306712610647,\n  0.0000810220735729672,\n  0.00011627597996266559,\n  0.00015435981913469732,\n  0.00011075224756496027,\n  0.00023204121680464596,\n  0.00016125976981129497,\n  0.00016212768969126046,\n  0.0001844156940933317,\n  0.00010478137119207531,\n  0.00015369664470199496,\n  0.00008935948426369578,\n  0.00010879309411393479,\n  0.00012111470277886838,\n  0.00008374268509214744,\n  0.0001489239075453952,\n  0.0000822411966510117,\n  0.00009430522186448798,\n  0.0000771188351791352,\n  0.00006772424967493862,\n  0.00010531163570703939,\n  0.00010478979675099254,\n  0.00010412650590296835,\n  0.00006883184687467292,\n  0.0001193125790450722,\n  0.0000894137192517519,\n  0.00012775821960531175,\n  0.00006736916839145124,\n  0.00014868532889522612,\n  0.00004484706005314365,\n  0.00014574534725397825,\n  0.00003765391375054605,\n  0.00009720102389110252,\n  0.00006441951700253412,\n  0.00008998843986773863,\n  0.00007020658085821196,\n  0.00011746898962883279,\n  0.00008526955934939906,\n  0.000100068369647488,\n  0.00004829016688745469,\n  0.00007368881779257208,\n  0.00007512330921599641,\n  0.00008835303015075624,\n  0.00007996436761459336,\n  0.00006192046566866338,\n  0.000054877953516552225,\n  0.00007055088644847274,\n  0.0000974265713011846,\n  0.00012617673201020807,\n  0.00003344476499478333,\n  0.00008054394129430875,\n  0.0000386640676879324,\n  0.000011706914847309235,\n  0.00005620744559564628,\n  0.00004536424239631742,\n  0.00004435844675754197,\n  0.00005275526928016916,\n  0.00006510251114377752,\n  0.000051501621783245355,\n  0.00005916160444030538,\n  0.00005950031481916085,\n  0.0000619562779320404,\n  0.000058098961744690314,\n  0.00006302431575022638,\n  0.00005558686098083854,\n  0.000057687164371600375,\n  0.000054152180382516235,\n  0.000056959739595185965,\n  0.00005478786624735221,\n  0.000056555225455667824,\n  0.0000545124858035706,\n  0.00005343957673176192,\n  0.000053162806580075994,\n  0.00005283499194774777,\n  0.00005073206193628721,\n  0.00005176239210413769,\n  0.000052732659241883084,\n  0.000050749778893077746,\n  0.00005095661254017614,\n  0.000050615584768820554,\n  0.00005041175973019563,\n  0.00005035139110987075,\n  0.00004970029476680793,\n  0.00004939485006616451,\n  0.0000492754224978853,\n  0.00004882015855400823,\n  0.000048522928409511223,\n  0.00004851776611758396,\n  0.00004808378071174957,\n  0.00004788830119650811,\n  0.00004754679321194999,\n  0.00004734942194772884,\n  0.00004706543404608965,\n  0.00004686306056100875,\n  0.00004659954356611706,\n  0.00004638067548512481,\n  0.0000461314084532205,\n  0.00004594491110765375,\n  0.00004570136297843419,\n  0.000045451601181412116,\n  0.00004529534999164753,\n  0.00004501802322920412,\n  0.000044843174691777676,\n  0.00004463590812520124,\n  0.00004446181992534548,\n  0.000044269425416132435,\n  0.000044099517253926024,\n  0.000043918098526773974,\n  0.00004375124990474433,\n  0.00004358419027994387,\n  0.00004341606472735293,\n  0.00004325625559431501,\n  0.00004311650263844058,\n  0.00004296279075788334,\n  0.00004281027213437483,\n  0.000042662879423005506,\n  0.000042526982724666595,\n  0.00004239721965859644,\n  0.000042266419768566266,\n  0.000042139890865655616,\n  0.000042014664359157905,\n  0.00004190728941466659,\n  0.000041795155993895605,\n  0.00004164962228969671,\n  0.00004156548311584629,\n  0.000041452221921645105,\n  0.00004138466829317622,\n  0.000041235452954424545,\n  0.00004117738353670575,\n  0.00004103156243218109,\n  0.00004099567377124913,\n  0.0000408665910072159,\n  0.000040781640564091504,\n  0.000040702696423977613,\n  0.00004071614966960624,\n  0.000040557879401603714,\n  0.00004057771366205998,\n  0.00004042521686642431,\n  0.000040454877307638526,\n  0.00004033196091768332,\n  0.000040314440411748365,\n  0.00004025205998914316,\n  0.00004019767220597714,\n  0.00004014767910121009,\n  0.000040113944123731926,\n  0.00004006719245808199,\n  0.00004002838977612555,\n  0.00003999406908405945,\n  0.00003997508611064404,\n  0.000039950125938048586,\n  0.000039922357245814055,\n  0.00003990518962382339,\n  0.000039885668229544535,\n  0.00003987615491496399,\n  0.000039878399547887966,\n  0.00003984460636274889,\n  0.00003985162766184658,\n]);\n\nvar barkScale = new Float32Array([\n  0,\n  0.8502324223518372,\n  1.694183111190796,\n  2.5250110626220703,\n  3.336550712585449,\n  4.123549461364746,\n  4.881809711456299,\n  5.60823392868042,\n  6.300786972045898,\n  6.9583940505981445,\n  7.580804347991943,\n  8.168436050415039,\n  8.722225189208984,\n  9.243483543395996,\n  9.733778953552246,\n  10.194833755493164,\n  10.628447532653809,\n  11.036436080932617,\n  11.420586585998535,\n  11.782628059387207,\n  12.124208450317383,\n  12.446884155273438,\n  12.752114295959473,\n  13.041257858276367,\n  13.315570831298828,\n  13.576218605041504,\n  13.824270248413086,\n  14.060709953308105,\n  14.286441802978516,\n  14.502294540405273,\n  14.709027290344238,\n  14.907334327697754,\n  15.097854614257812,\n  15.281168937683105,\n  15.457812309265137,\n  15.628273963928223,\n  15.793001174926758,\n  15.95240592956543,\n  16.106861114501953,\n  16.256715774536133,\n  16.40228271484375,\n  16.543851852416992,\n  16.68168830871582,\n  16.816038131713867,\n  16.947120666503906,\n  17.075143814086914,\n  17.20029067993164,\n  17.322736740112305,\n  17.44263458251953,\n  17.560131072998047,\n  17.675357818603516,\n  17.788429260253906,\n  17.899459838867188,\n  18.008546829223633,\n  18.115779876708984,\n  18.221240997314453,\n  18.32500648498535,\n  18.427141189575195,\n  18.5277099609375,\n  18.62676239013672,\n  18.72435188293457,\n  18.82052230834961,\n  18.915313720703125,\n  19.008760452270508,\n  19.100894927978516,\n  19.191747665405273,\n  19.281343460083008,\n  19.36970329284668,\n  19.45684814453125,\n  19.542797088623047,\n  19.627565383911133,\n  19.71116828918457,\n  19.79361915588379,\n  19.87492561340332,\n  19.955102920532227,\n  20.03415870666504,\n  20.112102508544922,\n  20.188940048217773,\n  20.26468276977539,\n  20.339336395263672,\n  20.412906646728516,\n  20.485403060913086,\n  20.55683135986328,\n  20.627199172973633,\n  20.69651222229004,\n  20.76477813720703,\n  20.83200454711914,\n  20.89820098876953,\n  20.96337127685547,\n  21.02752685546875,\n  21.090675354003906,\n  21.15282440185547,\n  21.2139835357666,\n  21.27416229248047,\n  21.333370208740234,\n  21.391616821289062,\n  21.44891357421875,\n  21.505268096923828,\n  21.56069564819336,\n  21.615201950073242,\n  21.66880226135254,\n  21.721508026123047,\n  21.773326873779297,\n  21.824275970458984,\n  21.87436294555664,\n  21.923601150512695,\n  21.972003936767578,\n  22.01958465576172,\n  22.06635284423828,\n  22.112321853637695,\n  22.15750503540039,\n  22.201915740966797,\n  22.24556541442871,\n  22.28846549987793,\n  22.330629348754883,\n  22.372072219848633,\n  22.41280174255371,\n  22.452835083007812,\n  22.4921817779541,\n  22.530853271484375,\n  22.568864822387695,\n  22.606224060058594,\n  22.642948150634766,\n  22.679046630859375,\n  22.714529037475586,\n  22.749408721923828,\n  22.78369903564453,\n  22.817407608032227,\n  22.850547790527344,\n  22.88313102722168,\n  22.915164947509766,\n  22.946664810180664,\n  22.977636337280273,\n  23.008092880249023,\n  23.038043975830078,\n  23.06749725341797,\n  23.096466064453125,\n  23.124958038330078,\n  23.152984619140625,\n  23.180551528930664,\n  23.207670211791992,\n  23.23434829711914,\n  23.260595321655273,\n  23.286420822143555,\n  23.311830520629883,\n  23.336835861206055,\n  23.36144256591797,\n  23.38566017150879,\n  23.409494400024414,\n  23.432954788208008,\n  23.45604705810547,\n  23.47878074645996,\n  23.501161575317383,\n  23.523195266723633,\n  23.544889450073242,\n  23.566253662109375,\n  23.587289810180664,\n  23.608007431030273,\n  23.6284122467041,\n  23.648509979248047,\n  23.668306350708008,\n  23.687808990478516,\n  23.707019805908203,\n  23.725948333740234,\n  23.744598388671875,\n  23.762975692749023,\n  23.781084060668945,\n  23.798931121826172,\n  23.81652069091797,\n  23.8338565826416,\n  23.85094451904297,\n  23.86779022216797,\n  23.884397506713867,\n  23.90077018737793,\n  23.916912078857422,\n  23.932830810546875,\n  23.94852638244629,\n  23.964006423950195,\n  23.979272842407227,\n  23.99432945251465,\n  24.00918197631836,\n  24.023832321166992,\n  24.038286209106445,\n  24.05254364013672,\n  24.066612243652344,\n  24.08049201965332,\n  24.09419059753418,\n  24.10770606994629,\n  24.12104606628418,\n  24.13421058654785,\n  24.14720344543457,\n  24.160030364990234,\n  24.172691345214844,\n  24.185190200805664,\n  24.197528839111328,\n  24.209712982177734,\n  24.22174072265625,\n  24.233619689941406,\n  24.24534797668457,\n  24.25693130493164,\n  24.26837158203125,\n  24.27967071533203,\n  24.290830612182617,\n  24.30185317993164,\n  24.312744140625,\n  24.323501586914062,\n  24.334129333496094,\n  24.34463119506836,\n  24.355005264282227,\n  24.365259170532227,\n  24.375389099121094,\n  24.385400772094727,\n  24.395296096801758,\n  24.405075073242188,\n  24.41474151611328,\n  24.42429542541504,\n  24.433738708496094,\n  24.44307518005371,\n  24.45230484008789,\n  24.461429595947266,\n  24.47045135498047,\n  24.479372024536133,\n  24.488191604614258,\n  24.49691390991211,\n  24.505538940429688,\n  24.514068603515625,\n  24.522504806518555,\n  24.53084945678711,\n  24.53910255432129,\n  24.547266006469727,\n  24.555341720581055,\n  24.563329696655273,\n  24.57123374938965,\n  24.579051971435547,\n  24.586788177490234,\n  24.594440460205078,\n  24.602014541625977,\n  24.609508514404297,\n  24.616924285888672,\n  24.624263763427734,\n  24.631526947021484,\n  24.638713836669922,\n  24.645828247070312,\n  24.652870178222656,\n  24.659839630126953,\n  24.66674041748047,\n  24.67357063293457,\n  24.680330276489258,\n  24.68702507019043,\n  24.69365119934082,\n  24.700212478637695,\n  24.706708908081055,\n  24.71314239501953,\n  24.719511032104492,\n  24.725818634033203,\n  24.732065200805664,\n  24.738250732421875,\n  24.74437713623047,\n  24.750444412231445,\n  24.756454467773438,\n  24.762407302856445,\n  24.76830291748047,\n  24.774141311645508,\n  24.77992820739746,\n  24.78565788269043,\n  24.791336059570312,\n  24.796960830688477,\n  24.802532196044922,\n  24.808053970336914,\n  24.81352424621582,\n  24.818944931030273,\n  24.824316024780273,\n  24.82963752746582,\n  24.83491325378418,\n  24.840139389038086,\n  24.845319747924805,\n  24.850452423095703,\n  24.855539321899414,\n  24.86058235168457,\n  24.865581512451172,\n  24.870534896850586,\n  24.875444412231445,\n  24.880311965942383,\n  24.8851375579834,\n  24.889921188354492,\n  24.894662857055664,\n  24.899364471435547,\n  24.90402603149414,\n  24.908647537231445,\n  24.91322898864746,\n  24.91777229309082,\n  24.92227554321289,\n  24.926742553710938,\n  24.931171417236328,\n  24.935564041137695,\n  24.93992042541504,\n  24.944238662719727,\n  24.948522567749023,\n  24.95277214050293,\n  24.956985473632812,\n  24.961164474487305,\n  24.965309143066406,\n  24.969419479370117,\n  24.973499298095703,\n  24.977542877197266,\n  24.981555938720703,\n  24.985536575317383,\n  24.989486694335938,\n  24.9934024810791,\n  24.997289657592773,\n  25.001144409179688,\n  25.00497055053711,\n  25.008766174316406,\n  25.012531280517578,\n  25.016267776489258,\n  25.019975662231445,\n  25.02365493774414,\n  25.02730369567871,\n  25.030925750732422,\n  25.034521102905273,\n  25.038087844848633,\n  25.041627883911133,\n  25.045141220092773,\n  25.048627853393555,\n  25.052087783813477,\n  25.055522918701172,\n  25.058931350708008,\n  25.062314987182617,\n  25.065673828125,\n  25.069005966186523,\n  25.072315216064453,\n  25.075599670410156,\n  25.078859329223633,\n  25.082096099853516,\n  25.085308074951172,\n  25.088499069213867,\n  25.091665267944336,\n  25.09480857849121,\n  25.097929000854492,\n  25.101028442382812,\n  25.10410499572754,\n  25.107158660888672,\n  25.110191345214844,\n  25.113203048706055,\n  25.116193771362305,\n  25.11916160583496,\n  25.12211036682129,\n  25.125038146972656,\n  25.127944946289062,\n  25.13083267211914,\n  25.133699417114258,\n  25.136547088623047,\n  25.139373779296875,\n  25.142183303833008,\n  25.14497184753418,\n  25.147741317749023,\n  25.150493621826172,\n  25.15322494506836,\n  25.15593910217285,\n  25.15863609313965,\n  25.161312103271484,\n  25.163972854614258,\n  25.166614532470703,\n  25.169239044189453,\n  25.171846389770508,\n  25.174436569213867,\n  25.1770076751709,\n  25.179563522338867,\n  25.182104110717773,\n  25.18462562561035,\n  25.187131881713867,\n  25.189620971679688,\n  25.192094802856445,\n  25.194551467895508,\n  25.19699478149414,\n  25.199420928955078,\n  25.20182991027832,\n  25.204225540161133,\n  25.206605911254883,\n  25.208969116210938,\n  25.211318969726562,\n  25.213655471801758,\n  25.215974807739258,\n  25.218280792236328,\n  25.220571517944336,\n  25.222848892211914,\n  25.22511100769043,\n  25.227359771728516,\n  25.229595184326172,\n  25.231815338134766,\n  25.23402214050293,\n  25.236215591430664,\n  25.23839569091797,\n  25.240564346313477,\n  25.242717742919922,\n  25.244857788085938,\n  25.246986389160156,\n  25.249099731445312,\n  25.251203536987305,\n  25.253292083740234,\n  25.255369186401367,\n  25.25743293762207,\n  25.259485244750977,\n  25.261526107788086,\n  25.263553619384766,\n  25.26556968688965,\n  25.267574310302734,\n  25.269567489624023,\n  25.271547317504883,\n  25.273517608642578,\n  25.275474548339844,\n  25.277420043945312,\n  25.279356002807617,\n  25.281278610229492,\n  25.283191680908203,\n  25.285093307495117,\n  25.286985397338867,\n  25.288864135742188,\n  25.290733337402344,\n  25.292593002319336,\n  25.29444122314453,\n  25.29627799987793,\n  25.298105239868164,\n  25.299922943115234,\n  25.301729202270508,\n  25.303525924682617,\n  25.30531120300293,\n  25.30708885192871,\n  25.308855056762695,\n  25.310611724853516,\n  25.312358856201172,\n  25.314096450805664,\n  25.315824508666992,\n  25.317543029785156,\n  25.319252014160156,\n  25.320951461791992,\n  25.322641372680664,\n  25.324323654174805,\n  25.32599639892578,\n  25.32765769958496,\n  25.329313278198242,\n  25.330957412719727,\n  25.33259391784668,\n  25.3342227935791,\n  25.335840225219727,\n  25.337451934814453,\n  25.339052200317383,\n  25.340646743774414,\n  25.34222984313965,\n  25.343807220458984,\n  25.345375061035156,\n  25.346935272216797,\n  25.348485946655273,\n  25.35003089904785,\n  25.351566314697266,\n  25.35309410095215,\n  25.354612350463867,\n  25.356124877929688,\n  25.357629776000977,\n  25.3591251373291,\n  25.360612869262695,\n  25.36209487915039,\n  25.363567352294922,\n  25.365034103393555,\n  25.366491317749023,\n  25.367942810058594,\n  25.369386672973633,\n  25.37082290649414,\n  25.372251510620117,\n  25.373672485351562,\n  25.37508773803711,\n  25.376495361328125,\n  25.37789535522461,\n  25.379289627075195,\n  25.38067626953125,\n  25.382055282592773,\n  25.3834285736084,\n  25.384794235229492,\n  25.386154174804688,\n  25.38750648498535,\n  25.388853073120117,\n  25.39019203186035,\n  25.391525268554688,\n  25.392852783203125,\n  25.39417266845703,\n  25.395484924316406,\n  25.396793365478516,\n  25.398094177246094,\n  25.399389266967773,\n  25.400676727294922,\n  25.401958465576172,\n  25.403234481811523,\n  25.404504776000977,\n  25.40576934814453,\n  25.407026290893555,\n  25.408279418945312,\n  25.40952491760254,\n  25.410764694213867,\n  25.411998748779297,\n  25.41322898864746,\n  25.414451599121094,\n  25.415668487548828,\n  25.416879653930664,\n  25.4180850982666,\n  25.41928482055664,\n  25.42047882080078,\n  25.421669006347656,\n  25.4228515625,\n  25.424030303955078,\n  25.425203323364258,\n  25.426368713378906,\n  25.427532196044922,\n]);\n\nconst expectedChromagramOutput = new Float32Array([\n  0.889173501932042,\n  0.8377149437424725,\n  0.7983608438722133,\n  0.8340835109903056,\n  0.9257658376982487,\n  0.9697310997078421,\n  1,\n  0.8781674865696717,\n  0.7889747445705728,\n  0.7880426774703064,\n  0.9250473589362254,\n  0.8824577772499042,\n]);\n\nexport default {\n  VALID_SIGNAL: validSignal,\n  VALID_AMPLITUDE_SPECTRUM: validAmpSpec,\n  VALID_FFT: validFFT,\n  VALID_BARK_SCALE: barkScale,\n  EXPECTED_POWER_SPECTRUM_OUTPUT: expectedPowerSpectrumOutput,\n  EXPECTED_CHROMAGRAM_OUTPUT: expectedChromagramOutput,\n};\n"
  },
  {
    "path": "__tests__/data/blackman1024.json",
    "content": "[\n  -1.3877787807814457e-17,\n  3.3951337172766216e-06,\n  1.358109057036927e-05,\n  3.055953493458219e-05,\n  5.433323894976638e-05,\n  8.490608888678253e-05,\n  0.00012228307605255395,\n  0.00016647028678562492,\n  0.00021747495338786393,\n  0.00027530535589903593,\n  0.00033997089485637844,\n  0.000411482120398432,\n  0.000489850586745888,\n  0.0005750890704803169,\n  0.0006672112504020333,\n  0.000766232144087553,\n  0.0008721675840206444,\n  0.000985034741461277,\n  0.0011048517189919949,\n  0.0012316375505179167,\n  0.0013654128415510058,\n  0.001506198663264513,\n  0.0016540174838155508,\n  0.0018088927026838064,\n  0.001970848999917507,\n  0.0021399117540568113,\n  0.0023161075077950954,\n  0.002499464200809598,\n  0.0026900102384388447,\n  0.0028877751901745796,\n  0.003092789789661765,\n  0.0033050859346985817,\n  0.003524696221575141,\n  0.0037516544107347727,\n  0.003985994961112738,\n  0.004227753262966871,\n  0.004476966802030802,\n  0.0047336723655462265,\n  0.004997908603399992,\n  0.005269715096801519,\n  0.005549132823944092,\n  0.005836201831698418,\n  0.006130965426564217,\n  0.006433466449379921,\n  0.006743749137967825,\n  0.007061857730150223,\n  0.007387838792055845,\n  0.007721738424152136,\n  0.008063605055212975,\n  0.008413486182689667,\n  0.00877143070101738,\n  0.009137489832937717,\n  0.009511712938547134,\n  0.009894154034554958,\n  0.010284862481057644,\n  0.010683894157409668,\n  0.011091301217675209,\n  0.011507139541208744,\n  0.0119314631447196,\n  0.012364329770207405,\n  0.012805796228349209,\n  0.013255918398499489,\n  0.013714756816625595,\n  0.01418236829340458,\n  0.014658814296126366,\n  0.015144153498113155,\n  0.015638448297977448,\n  0.016141757369041443,\n  0.01665414683520794,\n  0.01717567630112171,\n  0.017706410959362984,\n  0.01824641227722168,\n  0.018795747309923172,\n  0.019354479387402534,\n  0.01992267370223999,\n  0.02050039730966091,\n  0.02108771540224552,\n  0.021684695035219193,\n  0.022291403263807297,\n  0.022907909005880356,\n  0.023534279316663742,\n  0.024170581251382828,\n  0.024816887453198433,\n  0.02547326497733593,\n  0.02613978274166584,\n  0.026816511526703835,\n  0.027503522112965584,\n  0.02820088528096676,\n  0.02890866994857788,\n  0.02962694875895977,\n  0.030355794355273247,\n  0.031095275655388832,\n  0.031845465302467346,\n  0.03260643407702446,\n  0.03337825834751129,\n  0.034161005169153214,\n  0.034954752773046494,\n  0.035759568214416504,\n  0.036575525999069214,\n  0.03740270063281059,\n  0.03824116289615631,\n  0.03909098729491234,\n  0.039952244609594345,\n  0.0408250093460083,\n  0.041709356009960175,\n  0.04260535538196564,\n  0.04351307824254036,\n  0.04443260282278061,\n  0.04536399617791176,\n  0.04630733281373978,\n  0.04726269096136093,\n  0.0482301339507103,\n  0.04920973628759384,\n  0.050201576203107834,\n  0.05120571702718735,\n  0.05222223699092865,\n  0.053251203149557114,\n  0.05429269000887871,\n  0.0553467683494091,\n  0.056413501501083374,\n  0.05749296769499779,\n  0.058585237711668015,\n  0.05969037488102913,\n  0.0608084499835968,\n  0.061939533799886703,\n  0.0630836933851242,\n  0.06424099951982498,\n  0.0654115155339241,\n  0.06659531593322754,\n  0.06779245287179947,\n  0.06900300830602646,\n  0.07022703438997269,\n  0.07146460562944412,\n  0.07271578162908554,\n  0.07398062944412231,\n  0.07525921612977982,\n  0.07655159384012222,\n  0.07785782963037491,\n  0.07917798310518265,\n  0.08051211386919022,\n  0.08186028897762299,\n  0.08322256803512573,\n  0.08459899574518204,\n  0.08598964661359787,\n  0.08739456534385681,\n  0.08881381154060364,\n  0.09024744480848312,\n  0.09169550985097885,\n  0.09315807372331619,\n  0.09463518112897873,\n  0.09612688422203064,\n  0.0976332351565361,\n  0.0991542860865593,\n  0.1006900817155838,\n  0.1022406741976738,\n  0.10380610823631287,\n  0.10538642853498459,\n  0.10698168724775314,\n  0.10859192162752151,\n  0.11021718382835388,\n  0.11185750365257263,\n  0.11351293325424194,\n  0.1151835024356842,\n  0.116869255900383,\n  0.1185702309012413,\n  0.12028646469116211,\n  0.1220179870724678,\n  0.12376484274864197,\n  0.1255270540714264,\n  0.12730465829372406,\n  0.12909768521785736,\n  0.13090617954730988,\n  0.1327301412820816,\n  0.13456960022449493,\n  0.13642460107803345,\n  0.13829515874385834,\n  0.140181303024292,\n  0.1420830488204956,\n  0.14400039613246918,\n  0.14593340456485748,\n  0.14788205921649933,\n  0.1498463898897171,\n  0.151826411485672,\n  0.1538221389055252,\n  0.15583357214927673,\n  0.15786074101924896,\n  0.1599036306142807,\n  0.16196227073669434,\n  0.16403664648532867,\n  0.1661267876625061,\n  0.16823266446590424,\n  0.17035430669784546,\n  0.17249169945716858,\n  0.1746448576450348,\n  0.1768137514591217,\n  0.17899839580059052,\n  0.18119877576828003,\n  0.18341489136219025,\n  0.18564672768115997,\n  0.18789426982402802,\n  0.19015750288963318,\n  0.19243642687797546,\n  0.19473102688789368,\n  0.19704125821590424,\n  0.19936713576316833,\n  0.2017085999250412,\n  0.20406566560268402,\n  0.20643828809261322,\n  0.2088264375925064,\n  0.2112300992012024,\n  0.21364924311637878,\n  0.216083824634552,\n  0.21853382885456085,\n  0.22099919617176056,\n  0.22347991168498993,\n  0.2259759157896042,\n  0.22848719358444214,\n  0.2310137003660202,\n  0.2335553765296936,\n  0.23611217737197876,\n  0.2386840581893921,\n  0.24127097427845,\n  0.24387288093566895,\n  0.2464897185564041,\n  0.24912142753601074,\n  0.25176796317100525,\n  0.25442925095558167,\n  0.2571052610874176,\n  0.2597958743572235,\n  0.2625010907649994,\n  0.2652208209037781,\n  0.2679549753665924,\n  0.2707034945487976,\n  0.2734663486480713,\n  0.2762434184551239,\n  0.27903464436531067,\n  0.28183993697166443,\n  0.2846592366695404,\n  0.28749245405197144,\n  0.29033952951431274,\n  0.2932003438472748,\n  0.2960748076438904,\n  0.29896289110183716,\n  0.3018644452095032,\n  0.30477938055992126,\n  0.30770763754844666,\n  0.3106490969657898,\n  0.3136036992073059,\n  0.31657129526138306,\n  0.3195517957210541,\n  0.3225451111793518,\n  0.3255511522293091,\n  0.32856976985931396,\n  0.3316009044647217,\n  0.3346444070339203,\n  0.3377001881599426,\n  0.34076812863349915,\n  0.3438480794429779,\n  0.34693998098373413,\n  0.35004371404647827,\n  0.353159099817276,\n  0.35628604888916016,\n  0.3594244420528412,\n  0.36257416009902954,\n  0.3657350242137909,\n  0.36890697479248047,\n  0.37208983302116394,\n  0.37528350949287415,\n  0.37848779559135437,\n  0.38170263171195984,\n  0.3849278390407562,\n  0.3881632685661316,\n  0.3914088308811188,\n  0.39466431736946106,\n  0.3979296088218689,\n  0.40120455622673035,\n  0.40448904037475586,\n  0.4077828526496887,\n  0.41108590364456177,\n  0.4143979847431183,\n  0.4177189767360687,\n  0.42104870080947876,\n  0.42438700795173645,\n  0.42773371934890747,\n  0.43108871579170227,\n  0.4344518184661865,\n  0.4378228187561035,\n  0.4412015974521637,\n  0.44458797574043274,\n  0.4479817748069763,\n  0.4513828158378601,\n  0.45479094982147217,\n  0.4582059979438782,\n  0.4616277515888214,\n  0.46505606174468994,\n  0.46849074959754944,\n  0.4719316363334656,\n  0.47537854313850403,\n  0.4788312613964081,\n  0.4822896122932434,\n  0.48575344681739807,\n  0.48922252655029297,\n  0.4926966726779938,\n  0.49617573618888855,\n  0.4996594786643982,\n  0.5031477212905884,\n  0.5066403150558472,\n  0.5101369619369507,\n  0.5136376023292542,\n  0.5171418786048889,\n  0.5206497311592102,\n  0.5241608619689941,\n  0.5276751518249512,\n  0.5311923623085022,\n  0.5347122550010681,\n  0.5382346510887146,\n  0.5417593717575073,\n  0.5452861785888672,\n  0.5488148331642151,\n  0.5523452162742615,\n  0.5558770298957825,\n  0.5594100952148438,\n  0.5629441738128662,\n  0.5664791464805603,\n  0.5700146555900574,\n  0.5735505819320679,\n  0.5770866870880127,\n  0.5806227922439575,\n  0.5841585993766785,\n  0.5876939296722412,\n  0.5912286043167114,\n  0.5947623252868652,\n  0.5982949137687683,\n  0.6018261313438416,\n  0.6053557991981506,\n  0.6088836193084717,\n  0.6124094128608704,\n  0.6159329414367676,\n  0.619454026222229,\n  0.6229723691940308,\n  0.6264877319335938,\n  0.6299999952316284,\n  0.6335088610649109,\n  0.6370140910148621,\n  0.6405154466629028,\n  0.6440126895904541,\n  0.6475057005882263,\n  0.6509941220283508,\n  0.6544777750968933,\n  0.6579563617706299,\n  0.661429762840271,\n  0.6648976802825928,\n  0.6683599352836609,\n  0.6718161702156067,\n  0.6752663254737854,\n  0.6787099838256836,\n  0.6821470260620117,\n  0.6855772137641907,\n  0.6890003085136414,\n  0.6924160122871399,\n  0.695824146270752,\n  0.6992245316505432,\n  0.702616810798645,\n  0.706000804901123,\n  0.7093762755393982,\n  0.7127429842948914,\n  0.7161007523536682,\n  0.7194492220878601,\n  0.7227882742881775,\n  0.7261176109313965,\n  0.7294370532035828,\n  0.7327463030815125,\n  0.7360451817512512,\n  0.7393333911895752,\n  0.74261075258255,\n  0.7458770275115967,\n  0.7491319179534912,\n  0.7523753046989441,\n  0.7556068301200867,\n  0.7588263750076294,\n  0.7620335817337036,\n  0.7652283310890198,\n  0.7684103846549988,\n  0.7715794444084167,\n  0.7747352719306946,\n  0.777877688407898,\n  0.7810065150260925,\n  0.7841213941574097,\n  0.7872222065925598,\n  0.7903086543083191,\n  0.7933804988861084,\n  0.7964376211166382,\n  0.7994796633720398,\n  0.8025065064430237,\n  0.805517852306366,\n  0.8085135221481323,\n  0.8114932775497437,\n  0.8144568800926208,\n  0.8174041509628296,\n  0.820334792137146,\n  0.8232486844062805,\n  0.8261455297470093,\n  0.8290250897407532,\n  0.8318872451782227,\n  0.8347317576408386,\n  0.8375583291053772,\n  0.8403668403625488,\n  0.8431569933891296,\n  0.8459286093711853,\n  0.8486815690994263,\n  0.8514155149459839,\n  0.8541303277015686,\n  0.8568257689476013,\n  0.8595016002655029,\n  0.8621577024459839,\n  0.8647938370704651,\n  0.8674097657203674,\n  0.8700053095817566,\n  0.8725802898406982,\n  0.8751344680786133,\n  0.8776676654815674,\n  0.8801796436309814,\n  0.8826703429222107,\n  0.8851394057273865,\n  0.8875867128372192,\n  0.8900121450424194,\n  0.8924153447151184,\n  0.8947963118553162,\n  0.897154688835144,\n  0.8994904160499573,\n  0.9018032550811768,\n  0.9040930867195129,\n  0.9063596129417419,\n  0.9086027145385742,\n  0.9108222723007202,\n  0.9130180478096008,\n  0.9151898622512817,\n  0.9173375964164734,\n  0.9194610714912415,\n  0.9215600490570068,\n  0.92363440990448,\n  0.9256840348243713,\n  0.9277086853981018,\n  0.9297082424163818,\n  0.9316825270652771,\n  0.933631420135498,\n  0.9355546832084656,\n  0.9374522566795349,\n  0.9393239617347717,\n  0.9411696791648865,\n  0.9429891705513,\n  0.9447823166847229,\n  0.9465490579605103,\n  0.948289155960083,\n  0.9500025510787964,\n  0.9516890048980713,\n  0.9533485174179077,\n  0.9549808502197266,\n  0.9565858840942383,\n  0.9581634998321533,\n  0.9597136378288269,\n  0.9612360596656799,\n  0.9627307057380676,\n  0.9641974568367004,\n  0.9656361937522888,\n  0.9670467972755432,\n  0.9684290885925293,\n  0.9697830677032471,\n  0.9711085557937622,\n  0.9724054932594299,\n  0.9736737012863159,\n  0.9749131798744202,\n  0.9761237502098083,\n  0.9773052930831909,\n  0.9784577488899231,\n  0.9795810580253601,\n  0.9806751012802124,\n  0.9817398190498352,\n  0.9827750325202942,\n  0.9837807416915894,\n  0.9847568869590759,\n  0.9857032895088196,\n  0.9866199493408203,\n  0.9875067472457886,\n  0.9883636236190796,\n  0.9891905188560486,\n  0.9899874329566956,\n  0.9907541871070862,\n  0.9914907217025757,\n  0.9921970963478088,\n  0.9928731322288513,\n  0.9935188293457031,\n  0.9941340684890747,\n  0.9947189092636108,\n  0.9952732920646667,\n  0.9957970380783081,\n  0.9962902665138245,\n  0.9967527985572815,\n  0.9971847534179688,\n  0.9975859522819519,\n  0.997956395149231,\n  0.9982960820198059,\n  0.9986050128936768,\n  0.998883068561554,\n  0.999130368232727,\n  0.9993467330932617,\n  0.9995322227478027,\n  0.9996868371963501,\n  0.9998105764389038,\n  0.9999033212661743,\n  0.9999651908874512,\n  0.9999961256980896,\n  0.9999961256980896,\n  0.9999651908874512,\n  0.9999033212661743,\n  0.9998105764389038,\n  0.9996868371963501,\n  0.9995322227478027,\n  0.9993467330932617,\n  0.999130368232727,\n  0.998883068561554,\n  0.9986050128936768,\n  0.9982960820198059,\n  0.997956395149231,\n  0.9975859522819519,\n  0.9971847534179688,\n  0.9967527985572815,\n  0.9962902665138245,\n  0.9957970380783081,\n  0.9952732920646667,\n  0.9947189092636108,\n  0.9941340684890747,\n  0.9935188293457031,\n  0.9928731322288513,\n  0.9921970963478088,\n  0.9914907217025757,\n  0.9907541871070862,\n  0.9899874329566956,\n  0.9891905188560486,\n  0.9883636236190796,\n  0.9875067472457886,\n  0.9866199493408203,\n  0.9857032895088196,\n  0.9847568869590759,\n  0.9837807416915894,\n  0.9827750325202942,\n  0.9817398190498352,\n  0.9806751012802124,\n  0.9795810580253601,\n  0.9784577488899231,\n  0.9773052930831909,\n  0.9761237502098083,\n  0.9749131798744202,\n  0.9736737012863159,\n  0.9724054932594299,\n  0.9711085557937622,\n  0.9697830677032471,\n  0.9684290885925293,\n  0.9670467972755432,\n  0.9656361937522888,\n  0.9641974568367004,\n  0.9627307057380676,\n  0.9612360596656799,\n  0.9597136378288269,\n  0.9581634998321533,\n  0.9565858840942383,\n  0.9549808502197266,\n  0.9533485174179077,\n  0.9516890048980713,\n  0.9500025510787964,\n  0.948289155960083,\n  0.9465490579605103,\n  0.9447823166847229,\n  0.9429891705513,\n  0.9411696791648865,\n  0.9393239617347717,\n  0.9374522566795349,\n  0.9355546832084656,\n  0.933631420135498,\n  0.9316825270652771,\n  0.9297082424163818,\n  0.9277086853981018,\n  0.9256840348243713,\n  0.92363440990448,\n  0.9215600490570068,\n  0.9194610714912415,\n  0.9173375964164734,\n  0.9151898622512817,\n  0.9130180478096008,\n  0.9108222723007202,\n  0.9086027145385742,\n  0.9063596129417419,\n  0.9040930867195129,\n  0.9018032550811768,\n  0.8994904160499573,\n  0.897154688835144,\n  0.8947963118553162,\n  0.8924153447151184,\n  0.8900121450424194,\n  0.8875867128372192,\n  0.8851394057273865,\n  0.8826703429222107,\n  0.8801796436309814,\n  0.8776676654815674,\n  0.8751344680786133,\n  0.8725802898406982,\n  0.8700053095817566,\n  0.8674097657203674,\n  0.8647938370704651,\n  0.8621577024459839,\n  0.8595016002655029,\n  0.8568257689476013,\n  0.8541303277015686,\n  0.8514155149459839,\n  0.8486815690994263,\n  0.8459286093711853,\n  0.8431569933891296,\n  0.8403668403625488,\n  0.8375583291053772,\n  0.8347317576408386,\n  0.8318872451782227,\n  0.8290250897407532,\n  0.8261455297470093,\n  0.8232486844062805,\n  0.820334792137146,\n  0.8174041509628296,\n  0.8144568800926208,\n  0.8114932775497437,\n  0.8085135221481323,\n  0.805517852306366,\n  0.8025065064430237,\n  0.7994796633720398,\n  0.7964376211166382,\n  0.7933804988861084,\n  0.7903086543083191,\n  0.7872222065925598,\n  0.7841213941574097,\n  0.7810065150260925,\n  0.777877688407898,\n  0.7747352719306946,\n  0.7715794444084167,\n  0.7684103846549988,\n  0.7652283310890198,\n  0.7620335817337036,\n  0.7588263750076294,\n  0.7556068301200867,\n  0.7523753046989441,\n  0.7491319179534912,\n  0.7458770275115967,\n  0.74261075258255,\n  0.7393333911895752,\n  0.7360451817512512,\n  0.7327463030815125,\n  0.7294370532035828,\n  0.7261176109313965,\n  0.7227882742881775,\n  0.7194492220878601,\n  0.7161007523536682,\n  0.7127429842948914,\n  0.7093762755393982,\n  0.706000804901123,\n  0.702616810798645,\n  0.6992245316505432,\n  0.695824146270752,\n  0.6924160122871399,\n  0.6890003085136414,\n  0.6855772137641907,\n  0.6821470260620117,\n  0.6787099838256836,\n  0.6752663254737854,\n  0.6718161702156067,\n  0.6683599352836609,\n  0.6648976802825928,\n  0.661429762840271,\n  0.6579563617706299,\n  0.6544777750968933,\n  0.6509941220283508,\n  0.6475057005882263,\n  0.6440126895904541,\n  0.6405154466629028,\n  0.6370140910148621,\n  0.6335088610649109,\n  0.6299999952316284,\n  0.6264877319335938,\n  0.6229723691940308,\n  0.619454026222229,\n  0.6159329414367676,\n  0.6124094128608704,\n  0.6088836193084717,\n  0.6053557991981506,\n  0.6018261313438416,\n  0.5982949137687683,\n  0.5947623252868652,\n  0.5912286043167114,\n  0.5876939296722412,\n  0.5841585993766785,\n  0.5806227922439575,\n  0.5770866870880127,\n  0.5735505819320679,\n  0.5700146555900574,\n  0.5664791464805603,\n  0.5629441738128662,\n  0.5594100952148438,\n  0.5558770298957825,\n  0.5523452162742615,\n  0.5488148331642151,\n  0.5452861785888672,\n  0.5417593717575073,\n  0.5382346510887146,\n  0.5347122550010681,\n  0.5311923623085022,\n  0.5276751518249512,\n  0.5241608619689941,\n  0.5206497311592102,\n  0.5171418786048889,\n  0.5136376023292542,\n  0.5101369619369507,\n  0.5066403150558472,\n  0.5031477212905884,\n  0.4996594786643982,\n  0.49617573618888855,\n  0.4926966726779938,\n  0.48922252655029297,\n  0.48575344681739807,\n  0.4822896122932434,\n  0.4788312613964081,\n  0.47537854313850403,\n  0.4719316363334656,\n  0.46849074959754944,\n  0.46505606174468994,\n  0.4616277515888214,\n  0.4582059979438782,\n  0.45479094982147217,\n  0.4513828158378601,\n  0.4479817748069763,\n  0.44458797574043274,\n  0.4412015974521637,\n  0.4378228187561035,\n  0.4344518184661865,\n  0.43108871579170227,\n  0.42773371934890747,\n  0.42438700795173645,\n  0.42104870080947876,\n  0.4177189767360687,\n  0.4143979847431183,\n  0.41108590364456177,\n  0.4077828526496887,\n  0.40448904037475586,\n  0.40120455622673035,\n  0.3979296088218689,\n  0.39466431736946106,\n  0.3914088308811188,\n  0.3881632685661316,\n  0.3849278390407562,\n  0.38170263171195984,\n  0.37848779559135437,\n  0.37528350949287415,\n  0.37208983302116394,\n  0.36890697479248047,\n  0.3657350242137909,\n  0.36257416009902954,\n  0.3594244420528412,\n  0.35628604888916016,\n  0.353159099817276,\n  0.35004371404647827,\n  0.34693998098373413,\n  0.3438480794429779,\n  0.34076812863349915,\n  0.3377001881599426,\n  0.3346444070339203,\n  0.3316009044647217,\n  0.32856976985931396,\n  0.3255511522293091,\n  0.3225451111793518,\n  0.3195517957210541,\n  0.31657129526138306,\n  0.3136036992073059,\n  0.3106490969657898,\n  0.30770763754844666,\n  0.30477938055992126,\n  0.3018644452095032,\n  0.29896289110183716,\n  0.2960748076438904,\n  0.2932003438472748,\n  0.29033952951431274,\n  0.28749245405197144,\n  0.2846592366695404,\n  0.28183993697166443,\n  0.27903464436531067,\n  0.2762434184551239,\n  0.2734663486480713,\n  0.2707034945487976,\n  0.2679549753665924,\n  0.2652208209037781,\n  0.2625010907649994,\n  0.2597958743572235,\n  0.2571052610874176,\n  0.25442925095558167,\n  0.25176796317100525,\n  0.24912142753601074,\n  0.2464897185564041,\n  0.24387288093566895,\n  0.24127097427845,\n  0.2386840581893921,\n  0.23611217737197876,\n  0.2335553765296936,\n  0.2310137003660202,\n  0.22848719358444214,\n  0.2259759157896042,\n  0.22347991168498993,\n  0.22099919617176056,\n  0.21853382885456085,\n  0.216083824634552,\n  0.21364924311637878,\n  0.2112300992012024,\n  0.2088264375925064,\n  0.20643828809261322,\n  0.20406566560268402,\n  0.2017085999250412,\n  0.19936713576316833,\n  0.19704125821590424,\n  0.19473102688789368,\n  0.19243642687797546,\n  0.19015750288963318,\n  0.18789426982402802,\n  0.18564672768115997,\n  0.18341489136219025,\n  0.18119877576828003,\n  0.17899839580059052,\n  0.1768137514591217,\n  0.1746448576450348,\n  0.17249169945716858,\n  0.17035430669784546,\n  0.16823266446590424,\n  0.1661267876625061,\n  0.16403664648532867,\n  0.16196227073669434,\n  0.1599036306142807,\n  0.15786074101924896,\n  0.15583357214927673,\n  0.1538221389055252,\n  0.151826411485672,\n  0.1498463898897171,\n  0.14788205921649933,\n  0.14593340456485748,\n  0.14400039613246918,\n  0.1420830488204956,\n  0.140181303024292,\n  0.13829515874385834,\n  0.13642460107803345,\n  0.13456960022449493,\n  0.1327301412820816,\n  0.13090617954730988,\n  0.12909768521785736,\n  0.12730465829372406,\n  0.1255270540714264,\n  0.12376484274864197,\n  0.1220179870724678,\n  0.12028646469116211,\n  0.1185702309012413,\n  0.116869255900383,\n  0.1151835024356842,\n  0.11351293325424194,\n  0.11185750365257263,\n  0.11021718382835388,\n  0.10859192162752151,\n  0.10698168724775314,\n  0.10538642853498459,\n  0.10380610823631287,\n  0.1022406741976738,\n  0.1006900817155838,\n  0.0991542860865593,\n  0.0976332351565361,\n  0.09612688422203064,\n  0.09463518112897873,\n  0.09315807372331619,\n  0.09169550985097885,\n  0.09024744480848312,\n  0.08881381154060364,\n  0.08739456534385681,\n  0.08598964661359787,\n  0.08459899574518204,\n  0.08322256803512573,\n  0.08186028897762299,\n  0.08051211386919022,\n  0.07917798310518265,\n  0.07785782963037491,\n  0.07655159384012222,\n  0.07525921612977982,\n  0.07398062944412231,\n  0.07271578162908554,\n  0.07146460562944412,\n  0.07022703438997269,\n  0.06900300830602646,\n  0.06779245287179947,\n  0.06659531593322754,\n  0.0654115155339241,\n  0.06424099951982498,\n  0.0630836933851242,\n  0.061939533799886703,\n  0.0608084499835968,\n  0.05969037488102913,\n  0.058585237711668015,\n  0.05749296769499779,\n  0.056413501501083374,\n  0.0553467683494091,\n  0.05429269000887871,\n  0.053251203149557114,\n  0.05222223699092865,\n  0.05120571702718735,\n  0.050201576203107834,\n  0.04920973628759384,\n  0.0482301339507103,\n  0.04726269096136093,\n  0.04630733281373978,\n  0.04536399617791176,\n  0.04443260282278061,\n  0.04351307824254036,\n  0.04260535538196564,\n  0.041709356009960175,\n  0.0408250093460083,\n  0.039952244609594345,\n  0.03909098729491234,\n  0.03824116289615631,\n  0.03740270063281059,\n  0.036575525999069214,\n  0.035759568214416504,\n  0.034954752773046494,\n  0.034161005169153214,\n  0.03337825834751129,\n  0.03260643407702446,\n  0.031845465302467346,\n  0.031095275655388832,\n  0.030355794355273247,\n  0.02962694875895977,\n  0.02890866994857788,\n  0.02820088528096676,\n  0.027503522112965584,\n  0.026816511526703835,\n  0.02613978274166584,\n  0.02547326497733593,\n  0.024816887453198433,\n  0.024170581251382828,\n  0.023534279316663742,\n  0.022907909005880356,\n  0.022291403263807297,\n  0.021684695035219193,\n  0.02108771540224552,\n  0.02050039730966091,\n  0.01992267370223999,\n  0.019354479387402534,\n  0.018795747309923172,\n  0.01824641227722168,\n  0.017706410959362984,\n  0.01717567630112171,\n  0.01665414683520794,\n  0.016141757369041443,\n  0.015638448297977448,\n  0.015144153498113155,\n  0.014658814296126366,\n  0.01418236829340458,\n  0.013714756816625595,\n  0.013255918398499489,\n  0.012805796228349209,\n  0.012364329770207405,\n  0.0119314631447196,\n  0.011507139541208744,\n  0.011091301217675209,\n  0.010683894157409668,\n  0.010284862481057644,\n  0.009894154034554958,\n  0.009511712938547134,\n  0.009137489832937717,\n  0.00877143070101738,\n  0.008413486182689667,\n  0.008063605055212975,\n  0.007721738424152136,\n  0.007387838792055845,\n  0.007061857730150223,\n  0.006743749137967825,\n  0.006433466449379921,\n  0.006130965426564217,\n  0.005836201831698418,\n  0.005549132823944092,\n  0.005269715096801519,\n  0.004997908603399992,\n  0.0047336723655462265,\n  0.004476966802030802,\n  0.004227753262966871,\n  0.003985994961112738,\n  0.0037516544107347727,\n  0.003524696221575141,\n  0.0033050859346985817,\n  0.003092789789661765,\n  0.0028877751901745796,\n  0.0026900102384388447,\n  0.002499464200809598,\n  0.0023161075077950954,\n  0.0021399117540568113,\n  0.001970848999917507,\n  0.0018088927026838064,\n  0.0016540174838155508,\n  0.001506198663264513,\n  0.0013654128415510058,\n  0.0012316375505179167,\n  0.0011048517189919949,\n  0.000985034741461277,\n  0.0008721675840206444,\n  0.000766232144087553,\n  0.0006672112504020333,\n  0.0005750890704803169,\n  0.000489850586745888,\n  0.000411482120398432,\n  0.00033997089485637844,\n  0.00027530535589903593,\n  0.00021747495338786393,\n  0.00016647028678562492,\n  0.00012228307605255395,\n  8.490608888678253e-05,\n  5.433323894976638e-05,\n  3.055953493458219e-05,\n  1.358109057036927e-05,\n  3.3951337172766216e-06,\n  -1.3877787807814457e-17\n]\n"
  },
  {
    "path": "__tests__/data/blackman128.json",
    "content": "[\n  -1.3877787807814457e-17,\n  0.00022048462415114045,\n  0.0008842693641781807,\n  0.0019983130041509867,\n  0.003574101720005274,\n  0.005627480801194906,\n  0.008178424090147018,\n  0.011250740848481655,\n  0.014871722087264061,\n  0.019071735441684723,\n  0.023883763700723648,\n  0.029342904686927795,\n  0.035485826432704926,\n  0.04235018044710159,\n  0.04997401311993599,\n  0.058395106345415115,\n  0.06765036284923553,\n  0.07777513563632965,\n  0.08880257606506348,\n  0.10076300799846649,\n  0.11368323862552643,\n  0.1275860071182251,\n  0.14248935878276825,\n  0.1584061086177826,\n  0.175343319773674,\n  0.19330184161663055,\n  0.21227586269378662,\n  0.23225261270999908,\n  0.253212034702301,\n  0.27512651681900024,\n  0.2979607582092285,\n  0.321671724319458,\n  0.3462085425853729,\n  0.37151262164115906,\n  0.39751771092414856,\n  0.42415013909339905,\n  0.45132920145988464,\n  0.4789673089981079,\n  0.5069705247879028,\n  0.5352391004562378,\n  0.5636678338050842,\n  0.5921469330787659,\n  0.6205624341964722,\n  0.6487972140312195,\n  0.6767313480377197,\n  0.7042432427406311,\n  0.7312102317810059,\n  0.7575095891952515,\n  0.7830193042755127,\n  0.8076188564300537,\n  0.8311902284622192,\n  0.8536187410354614,\n  0.8747937679290771,\n  0.8946096301078796,\n  0.9129664301872253,\n  0.929770827293396,\n  0.9449363946914673,\n  0.9583848714828491,\n  0.9700462818145752,\n  0.9798595309257507,\n  0.987773060798645,\n  0.9937452077865601,\n  0.9977442622184753,\n  0.9997491240501404,\n  0.9997491240501404,\n  0.9977442622184753,\n  0.9937452077865601,\n  0.987773060798645,\n  0.9798595309257507,\n  0.9700462818145752,\n  0.9583848714828491,\n  0.9449363946914673,\n  0.929770827293396,\n  0.9129664301872253,\n  0.8946096301078796,\n  0.8747937679290771,\n  0.8536187410354614,\n  0.8311902284622192,\n  0.8076188564300537,\n  0.7830193042755127,\n  0.7575095891952515,\n  0.7312102317810059,\n  0.7042432427406311,\n  0.6767313480377197,\n  0.6487972140312195,\n  0.6205624341964722,\n  0.5921469330787659,\n  0.5636678338050842,\n  0.5352391004562378,\n  0.5069705247879028,\n  0.4789673089981079,\n  0.45132920145988464,\n  0.42415013909339905,\n  0.39751771092414856,\n  0.37151262164115906,\n  0.3462085425853729,\n  0.321671724319458,\n  0.2979607582092285,\n  0.27512651681900024,\n  0.253212034702301,\n  0.23225261270999908,\n  0.21227586269378662,\n  0.19330184161663055,\n  0.175343319773674,\n  0.1584061086177826,\n  0.14248935878276825,\n  0.1275860071182251,\n  0.11368323862552643,\n  0.10076300799846649,\n  0.08880257606506348,\n  0.07777513563632965,\n  0.06765036284923553,\n  0.058395106345415115,\n  0.04997401311993599,\n  0.04235018044710159,\n  0.035485826432704926,\n  0.029342904686927795,\n  0.023883763700723648,\n  0.019071735441684723,\n  0.014871722087264061,\n  0.011250740848481655,\n  0.008178424090147018,\n  0.005627480801194906,\n  0.003574101720005274,\n  0.0019983130041509867,\n  0.0008842693641781807,\n  0.00022048462415114045,\n  -1.3877787807814457e-17\n]\n"
  },
  {
    "path": "__tests__/data/blackman2048.json",
    "content": "[\n  -1.3877787807814457e-17,\n  8.479456710119848e-07,\n  3.391817472220282e-06,\n  7.631719199707732e-06,\n  1.3567823771154508e-05,\n  2.1200372430030257e-05,\n  3.052967804251239e-05,\n  4.1556122596375644e-05,\n  5.42801535630133e-05,\n  6.870229117339477e-05,\n  8.4823121142108e-05,\n  0.00010264330921927467,\n  0.0001221635757246986,\n  0.00014338470646180212,\n  0.00016630758182145655,\n  0.00019093311857432127,\n  0.00021726233535446227,\n  0.000245296279899776,\n  0.00027503614546731114,\n  0.00030648306710645556,\n  0.0003396383544895798,\n  0.0003745033754967153,\n  0.000411079527111724,\n  0.00044936826452612877,\n  0.0004893711884506047,\n  0.000531089841388166,\n  0.0005745260277763009,\n  0.0006196813774295151,\n  0.0006665578112006187,\n  0.0007151571335271001,\n  0.0007654813816770911,\n  0.0008175325347110629,\n  0.0008713127463124692,\n  0.0009268240537494421,\n  0.000984068843536079,\n  0.0010430492693558335,\n  0.0011037677759304643,\n  0.0011662266915664077,\n  0.0012304286938160658,\n  0.001296376227401197,\n  0.0013640718534588814,\n  0.0014335184823721647,\n  0.0015047186752781272,\n  0.0015776753425598145,\n  0.0016523912781849504,\n  0.0017288696253672242,\n  0.0018071132944896817,\n  0.0018871253123506904,\n  0.001968909054994583,\n  0.0020524675492197275,\n  0.002137803938239813,\n  0.0022249219473451376,\n  0.002313824836164713,\n  0.00240451586432755,\n  0.002496998989954591,\n  0.0025912774726748466,\n  0.002687355037778616,\n  0.002785235643386841,\n  0.002884922781959176,\n  0.0029864206444472075,\n  0.00308973272331059,\n  0.0031948634423315525,\n  0.003301816526800394,\n  0.0034105961676687002,\n  0.0035212067887187004,\n  0.003633652115240693,\n  0.003747937036678195,\n  0.0038640655111521482,\n  0.003982041962444782,\n  0.00410187104716897,\n  0.004223557189106941,\n  0.004347105044871569,\n  0.0044725192710757256,\n  0.004599804524332285,\n  0.00472896546125412,\n  0.004860007204115391,\n  0.004992934409528971,\n  0.00512775219976902,\n  0.005264465697109699,\n  0.005403079558163881,\n  0.005543599370867014,\n  0.0056860302574932575,\n  0.005830376874655485,\n  0.0059766448102891445,\n  0.006124840117990971,\n  0.0062749674543738365,\n  0.00642703240737319,\n  0.0065810405649244785,\n  0.00673699751496315,\n  0.006894908845424652,\n  0.0070547801442444324,\n  0.007216617465019226,\n  0.007380426395684481,\n  0.007546212989836931,\n  0.0077139828354120255,\n  0.007883742451667786,\n  0.008055496960878372,\n  0.008229252882301807,\n  0.008405016735196114,\n  0.008582794107496738,\n  0.00876259058713913,\n  0.008944414556026459,\n  0.009128270670771599,\n  0.009314165450632572,\n  0.009502105414867401,\n  0.009692097082734108,\n  0.00988414790481329,\n  0.01007826253771782,\n  0.010274449363350868,\n  0.010472713969647884,\n  0.01067306287586689,\n  0.010875504463911057,\n  0.011080043390393257,\n  0.011286688037216663,\n  0.011495444923639297,\n  0.011706321500241756,\n  0.011919323354959488,\n  0.012134457938373089,\n  0.01235173363238573,\n  0.012571156024932861,\n  0.012792733497917652,\n  0.01301647163927555,\n  0.013242379762232304,\n  0.013470463454723358,\n  0.013700730167329311,\n  0.01393318921327591,\n  0.014167845249176025,\n  0.014404707588255405,\n  0.014643783681094646,\n  0.01488508004695177,\n  0.01512860506772995,\n  0.015374365262687206,\n  0.015622369945049286,\n  0.01587262563407421,\n  0.016125140711665154,\n  0.01637992262840271,\n  0.016636978834867477,\n  0.016896318644285202,\n  0.01715794764459133,\n  0.017421875149011612,\n  0.01768810860812664,\n  0.017956657335162163,\n  0.018227526918053627,\n  0.01850072853267193,\n  0.018776265904307365,\n  0.019054152071475983,\n  0.01933439075946808,\n  0.019616995006799698,\n  0.01990196853876114,\n  0.020189320668578148,\n  0.02047906070947647,\n  0.020771196112036705,\n  0.021065736189484596,\n  0.02136269025504589,\n  0.021662062034010887,\n  0.02196386456489563,\n  0.022268105298280716,\n  0.022574791684746742,\n  0.022883933037519455,\n  0.02319553680717945,\n  0.023509612306952477,\n  0.023826168850064278,\n  0.02414521388709545,\n  0.024466756731271744,\n  0.024790804833173752,\n  0.02511736750602722,\n  0.0254464540630579,\n  0.025778071954846382,\n  0.026112230494618416,\n  0.026448940858244896,\n  0.02678820677101612,\n  0.027130041271448135,\n  0.027474451810121536,\n  0.02782144583761692,\n  0.028171034529805183,\n  0.028523225337266922,\n  0.028878027573227882,\n  0.02923545055091381,\n  0.029595499858260155,\n  0.029958190396428108,\n  0.03032352589070797,\n  0.030691517516970634,\n  0.03106217458844185,\n  0.03143550455570221,\n  0.03181151673197746,\n  0.032190222293138504,\n  0.03257162868976593,\n  0.03295574337244034,\n  0.03334257751703262,\n  0.03373213857412338,\n  0.03412443771958351,\n  0.03451947867870331,\n  0.034917280077934265,\n  0.03531784191727638,\n  0.035721179097890854,\n  0.03612729534506798,\n  0.03653620555996895,\n  0.03694791719317436,\n  0.03736243396997452,\n  0.03777977451682091,\n  0.03819993883371353,\n  0.03862294182181358,\n  0.03904878720641136,\n  0.03947748988866806,\n  0.039909057319164276,\n  0.040343496948480606,\n  0.040780819952487946,\n  0.04122103005647659,\n  0.04166414588689804,\n  0.04211016744375229,\n  0.04255910962820053,\n  0.043010979890823364,\n  0.043465785682201385,\n  0.04392353445291519,\n  0.04438424110412598,\n  0.04484791308641434,\n  0.04531455785036087,\n  0.04578418284654617,\n  0.04625679925084114,\n  0.04673241823911667,\n  0.047211043536663055,\n  0.047692690044641495,\n  0.048177361488342285,\n  0.04866506904363632,\n  0.0491558238863945,\n  0.04964963346719742,\n  0.05014650523662567,\n  0.05064644664525986,\n  0.05114947259426117,\n  0.05165558680891991,\n  0.052164800465106964,\n  0.05267712101340294,\n  0.053192559629678726,\n  0.05371112376451492,\n  0.054232824593782425,\n  0.05475766584277153,\n  0.05528566241264343,\n  0.05581681802868843,\n  0.05635114014148712,\n  0.0568886436522007,\n  0.05742933601140976,\n  0.0579732209444046,\n  0.05852031335234642,\n  0.05907062068581581,\n  0.05962414667010307,\n  0.0601809024810791,\n  0.06074089929461479,\n  0.06130414456129074,\n  0.061870645731687546,\n  0.0624404102563858,\n  0.06301344931125641,\n  0.06358977407217026,\n  0.06416938453912735,\n  0.06475229561328888,\n  0.06533850729465485,\n  0.06592804193496704,\n  0.06652089953422546,\n  0.06711708754301071,\n  0.06771661341190338,\n  0.06831949204206467,\n  0.06892572343349457,\n  0.06953532248735428,\n  0.0701482966542244,\n  0.07076465338468552,\n  0.07138439267873764,\n  0.07200752943754196,\n  0.07263407856225967,\n  0.07326403260231018,\n  0.07389741390943527,\n  0.07453422248363495,\n  0.07517446577548981,\n  0.07581815868616104,\n  0.07646530121564865,\n  0.07711590081453323,\n  0.07776997238397598,\n  0.0784275159239769,\n  0.07908854633569717,\n  0.07975306361913681,\n  0.080421082675457,\n  0.08109260350465775,\n  0.08176764100790024,\n  0.08244619518518448,\n  0.08312828093767166,\n  0.08381389826536179,\n  0.08450305461883545,\n  0.08519576489925385,\n  0.08589203655719757,\n  0.08659186214208603,\n  0.08729526400566101,\n  0.08800224214792252,\n  0.08871280401945114,\n  0.08942695707082748,\n  0.09014471620321274,\n  0.0908660739660263,\n  0.09159103780984879,\n  0.09231963008642197,\n  0.09305184334516525,\n  0.09378768503665924,\n  0.09452717006206512,\n  0.0952702984213829,\n  0.09601707756519318,\n  0.09676751494407654,\n  0.09752161800861359,\n  0.09827938675880432,\n  0.09904083609580994,\n  0.09980596601963043,\n  0.10057477653026581,\n  0.10134728997945786,\n  0.10212350636720657,\n  0.10290341824293137,\n  0.10368705540895462,\n  0.10447440296411514,\n  0.10526546835899353,\n  0.10606027394533157,\n  0.10685880482196808,\n  0.10766108334064484,\n  0.10846710205078125,\n  0.10927687585353851,\n  0.11009040474891663,\n  0.11090768873691559,\n  0.11172875016927719,\n  0.11255357414484024,\n  0.11338218301534653,\n  0.11421456187963486,\n  0.11505074054002762,\n  0.11589070409536362,\n  0.11673445999622345,\n  0.11758202314376831,\n  0.1184333935379982,\n  0.11928856372833252,\n  0.12014755606651306,\n  0.12101037055253983,\n  0.12187699973583221,\n  0.12274745851755142,\n  0.12362175434827805,\n  0.12449987977743149,\n  0.12538185715675354,\n  0.12626765668392181,\n  0.1271573156118393,\n  0.12805083394050598,\n  0.12894819676876068,\n  0.1298494189977646,\n  0.1307545006275177,\n  0.1316634565591812,\n  0.13257628679275513,\n  0.13349297642707825,\n  0.13441354036331177,\n  0.13533799350261688,\n  0.1362663209438324,\n  0.1371985375881195,\n  0.1381346434354782,\n  0.1390746384859085,\n  0.1400185227394104,\n  0.14096631109714508,\n  0.14191798865795135,\n  0.14287357032299042,\n  0.14383305609226227,\n  0.1447964459657669,\n  0.14576375484466553,\n  0.14673495292663574,\n  0.14771008491516113,\n  0.1486891210079193,\n  0.14967207610607147,\n  0.15065895020961761,\n  0.15164974331855774,\n  0.15264445543289185,\n  0.15364308655261993,\n  0.1546456515789032,\n  0.15565213561058044,\n  0.15666253864765167,\n  0.15767689049243927,\n  0.15869516134262085,\n  0.1597173511981964,\n  0.16074348986148834,\n  0.16177354753017426,\n  0.16280755400657654,\n  0.1638454794883728,\n  0.16488733887672424,\n  0.16593313217163086,\n  0.16698287427425385,\n  0.1680365353822708,\n  0.16909414529800415,\n  0.17015567421913147,\n  0.17122115194797516,\n  0.17229054868221283,\n  0.17336389422416687,\n  0.1744411736726761,\n  0.17552238702774048,\n  0.17660751938819885,\n  0.1776966005563736,\n  0.17878960072994232,\n  0.17988653481006622,\n  0.1809874027967453,\n  0.18209220468997955,\n  0.1832009255886078,\n  0.1843135803937912,\n  0.1854301542043686,\n  0.18655066192150116,\n  0.1876750886440277,\n  0.18880343437194824,\n  0.18993568420410156,\n  0.19107186794281006,\n  0.19221197068691254,\n  0.1933559775352478,\n  0.19450388848781586,\n  0.1956557184457779,\n  0.19681145250797272,\n  0.19797109067440033,\n  0.19913463294506073,\n  0.20030207931995392,\n  0.2014734148979187,\n  0.20264863967895508,\n  0.20382775366306305,\n  0.20501075685024261,\n  0.20619764924049377,\n  0.20738841593265533,\n  0.2085830718278885,\n  0.20978158712387085,\n  0.2109839767217636,\n  0.21219024062156677,\n  0.21340034902095795,\n  0.21461433172225952,\n  0.2158321589231491,\n  0.2170538455247879,\n  0.2182793766260147,\n  0.21950873732566833,\n  0.22074194252490997,\n  0.22197897732257843,\n  0.2232198417186737,\n  0.2244645357131958,\n  0.22571304440498352,\n  0.22696536779403687,\n  0.22822149097919464,\n  0.22948141396045685,\n  0.23074515163898468,\n  0.23201265931129456,\n  0.23328396677970886,\n  0.2345590442419052,\n  0.2358379065990448,\n  0.23712053894996643,\n  0.2384069263935089,\n  0.23969706892967224,\n  0.24099096655845642,\n  0.24228860437870026,\n  0.24358998239040375,\n  0.2448950856924057,\n  0.24620391428470612,\n  0.247516468167305,\n  0.24883271753787994,\n  0.25015267729759216,\n  0.25147634744644165,\n  0.2528036832809448,\n  0.2541347146034241,\n  0.255469411611557,\n  0.25680777430534363,\n  0.25814980268478394,\n  0.25949546694755554,\n  0.26084479689598083,\n  0.26219773292541504,\n  0.26355430483818054,\n  0.26491451263427734,\n  0.26627829670906067,\n  0.2676457166671753,\n  0.26901671290397644,\n  0.2703912854194641,\n  0.2717694342136383,\n  0.273151159286499,\n  0.2745364308357239,\n  0.27592524886131287,\n  0.2773175835609436,\n  0.27871349453926086,\n  0.2801128923892975,\n  0.28151580691337585,\n  0.2829222083091736,\n  0.28433212637901306,\n  0.2857455015182495,\n  0.28716233372688293,\n  0.2885826528072357,\n  0.2900063991546631,\n  0.2914336025714874,\n  0.29286420345306396,\n  0.2942982614040375,\n  0.2957356870174408,\n  0.2971765398979187,\n  0.2986207604408264,\n  0.30006834864616394,\n  0.3015192747116089,\n  0.30297359824180603,\n  0.3044312298297882,\n  0.3058921992778778,\n  0.30735647678375244,\n  0.3088240623474121,\n  0.3102949261665344,\n  0.3117690682411194,\n  0.313246488571167,\n  0.31472715735435486,\n  0.316211074590683,\n  0.317698210477829,\n  0.31918856501579285,\n  0.3206821084022522,\n  0.3221788704395294,\n  0.32367879152297974,\n  0.32518187165260315,\n  0.32668811082839966,\n  0.3281974792480469,\n  0.3297099769115448,\n  0.33122560381889343,\n  0.332744300365448,\n  0.3342660963535309,\n  0.3357909321784973,\n  0.3373188376426697,\n  0.338849812746048,\n  0.34038376808166504,\n  0.34192076325416565,\n  0.34346073865890503,\n  0.34500372409820557,\n  0.3465496301651001,\n  0.3480985164642334,\n  0.3496503531932831,\n  0.35120511054992676,\n  0.35276275873184204,\n  0.35432329773902893,\n  0.3558867275714874,\n  0.35745298862457275,\n  0.3590221107006073,\n  0.3605940639972687,\n  0.3621688485145569,\n  0.36374640464782715,\n  0.36532676219940186,\n  0.36690986156463623,\n  0.36849573254585266,\n  0.37008431553840637,\n  0.37167564034461975,\n  0.373269647359848,\n  0.3748663365840912,\n  0.37646567821502686,\n  0.3780677020549774,\n  0.3796723186969757,\n  0.3812795877456665,\n  0.38288941979408264,\n  0.3845018446445465,\n  0.3861168324947357,\n  0.3877343535423279,\n  0.389354407787323,\n  0.39097699522972107,\n  0.39260202646255493,\n  0.39422956109046936,\n  0.3958595395088196,\n  0.3974919617176056,\n  0.399126797914505,\n  0.4007640480995178,\n  0.40240365266799927,\n  0.40404564142227173,\n  0.40568995475769043,\n  0.40733659267425537,\n  0.40898555517196655,\n  0.4106367826461792,\n  0.4122902750968933,\n  0.4139460325241089,\n  0.41560399532318115,\n  0.4172641932964325,\n  0.41892656683921814,\n  0.4205910861492157,\n  0.42225778102874756,\n  0.42392659187316895,\n  0.42559751868247986,\n  0.4272705614566803,\n  0.4289456307888031,\n  0.43062275648117065,\n  0.43230193853378296,\n  0.43398308753967285,\n  0.4356662333011627,\n  0.43735137581825256,\n  0.4390384256839752,\n  0.4407274127006531,\n  0.44241830706596375,\n  0.44411107897758484,\n  0.44580569863319397,\n  0.4475021958351135,\n  0.44920048117637634,\n  0.4509005546569824,\n  0.45260241627693176,\n  0.454306036233902,\n  0.4560113847255707,\n  0.4577184319496155,\n  0.4594271779060364,\n  0.4611375629901886,\n  0.46284961700439453,\n  0.4645632803440094,\n  0.4662785530090332,\n  0.46799540519714355,\n  0.4697137773036957,\n  0.47143369913101196,\n  0.47315514087677,\n  0.47487807273864746,\n  0.4766024351119995,\n  0.47832825779914856,\n  0.48005548119544983,\n  0.4817841053009033,\n  0.48351410031318665,\n  0.4852454662322998,\n  0.48697811365127563,\n  0.4887120723724365,\n  0.4904473125934601,\n  0.4921838045120239,\n  0.49392154812812805,\n  0.4956604540348053,\n  0.49740055203437805,\n  0.4991418123245239,\n  0.5008842349052429,\n  0.5026277303695679,\n  0.5043722987174988,\n  0.5061179399490356,\n  0.5078646540641785,\n  0.5096123218536377,\n  0.5113610029220581,\n  0.5131106376647949,\n  0.5148612260818481,\n  0.516612708568573,\n  0.5183650255203247,\n  0.5201182961463928,\n  0.521872341632843,\n  0.5236272215843201,\n  0.5253828763961792,\n  0.5271393060684204,\n  0.5288965106010437,\n  0.5306543707847595,\n  0.5324129462242126,\n  0.5341721773147583,\n  0.5359320044517517,\n  0.5376924872398376,\n  0.5394535064697266,\n  0.5412151217460632,\n  0.5429772138595581,\n  0.544739842414856,\n  0.5465030074119568,\n  0.5482665300369263,\n  0.550030529499054,\n  0.5517949461936951,\n  0.5535597205162048,\n  0.5553247928619385,\n  0.5570902228355408,\n  0.5588559508323669,\n  0.560621976852417,\n  0.5623881816864014,\n  0.5641546249389648,\n  0.5659213066101074,\n  0.5676881074905396,\n  0.5694550275802612,\n  0.5712220668792725,\n  0.5729891657829285,\n  0.574756383895874,\n  0.5765235424041748,\n  0.5782907605171204,\n  0.5800579190254211,\n  0.5818250179290771,\n  0.5835920572280884,\n  0.5853589773178101,\n  0.5871257781982422,\n  0.58889240026474,\n  0.5906588435173035,\n  0.5924250483512878,\n  0.5941910147666931,\n  0.5959566831588745,\n  0.597722053527832,\n  0.5994871258735657,\n  0.6012517809867859,\n  0.6030160784721375,\n  0.6047799587249756,\n  0.6065434217453003,\n  0.6083064079284668,\n  0.6100688576698303,\n  0.6118308305740356,\n  0.6135922074317932,\n  0.6153530478477478,\n  0.6171132326126099,\n  0.6188728213310242,\n  0.6206316947937012,\n  0.6223899126052856,\n  0.624147355556488,\n  0.6259040832519531,\n  0.6276600360870361,\n  0.6294151544570923,\n  0.6311694383621216,\n  0.6329228281974792,\n  0.6346753835678101,\n  0.6364269852638245,\n  0.6381776332855225,\n  0.639927327632904,\n  0.6416759490966797,\n  0.6434235572814941,\n  0.6451701521873474,\n  0.6469155550003052,\n  0.648659884929657,\n  0.6504030823707581,\n  0.6521450877189636,\n  0.6538858413696289,\n  0.6556254029273987,\n  0.6573636531829834,\n  0.6591006517410278,\n  0.6608362793922424,\n  0.6625705361366272,\n  0.6643034815788269,\n  0.6660349369049072,\n  0.6677649617195129,\n  0.669493556022644,\n  0.671220600605011,\n  0.6729461550712585,\n  0.6746701002120972,\n  0.6763924956321716,\n  0.6781132221221924,\n  0.6798323392868042,\n  0.6815497875213623,\n  0.6832655072212219,\n  0.6849794983863831,\n  0.6866917610168457,\n  0.6884021759033203,\n  0.6901107430458069,\n  0.6918175220489502,\n  0.6935223937034607,\n  0.6952253580093384,\n  0.6969263553619385,\n  0.6986254453659058,\n  0.7003224492073059,\n  0.7020174860954285,\n  0.7037104368209839,\n  0.7054013013839722,\n  0.7070900797843933,\n  0.7087766528129578,\n  0.7104610800743103,\n  0.7121433019638062,\n  0.7138233184814453,\n  0.7155010104179382,\n  0.7171764969825745,\n  0.7188495993614197,\n  0.7205203175544739,\n  0.7221887111663818,\n  0.723854660987854,\n  0.7255182266235352,\n  0.727179229259491,\n  0.728837788105011,\n  0.7304938435554504,\n  0.7321473360061646,\n  0.7337982058525085,\n  0.7354464530944824,\n  0.7370920777320862,\n  0.738735020160675,\n  0.740375280380249,\n  0.7420127987861633,\n  0.7436475157737732,\n  0.7452794909477234,\n  0.7469086647033691,\n  0.7485349178314209,\n  0.7501583099365234,\n  0.7517788410186768,\n  0.7533963918685913,\n  0.7550110220909119,\n  0.7566226124763489,\n  0.7582311630249023,\n  0.759836733341217,\n  0.7614391446113586,\n  0.7630385160446167,\n  0.7646346688270569,\n  0.7662277221679688,\n  0.7678175568580627,\n  0.7694041132926941,\n  0.7709874510765076,\n  0.7725675106048584,\n  0.7741442918777466,\n  0.7757176756858826,\n  0.7772877216339111,\n  0.7788543701171875,\n  0.7804175615310669,\n  0.7819772958755493,\n  0.7835335731506348,\n  0.7850863337516785,\n  0.7866355180740356,\n  0.7881811857223511,\n  0.7897232174873352,\n  0.791261613368988,\n  0.7927963733673096,\n  0.7943274974822998,\n  0.7958548069000244,\n  0.7973784804344177,\n  0.7988982796669006,\n  0.8004143834114075,\n  0.8019266128540039,\n  0.8034349679946899,\n  0.8049394488334656,\n  0.8064400553703308,\n  0.8079367280006409,\n  0.809429407119751,\n  0.8109180927276611,\n  0.8124027848243713,\n  0.8138834238052368,\n  0.8153599500656128,\n  0.816832423210144,\n  0.818300724029541,\n  0.8197648525238037,\n  0.8212248682975769,\n  0.8226805925369263,\n  0.8241321444511414,\n  0.8255794048309326,\n  0.8270223140716553,\n  0.8284609913825989,\n  0.8298952579498291,\n  0.8313251733779907,\n  0.832750678062439,\n  0.8341717720031738,\n  0.8355883955955505,\n  0.8370004892349243,\n  0.8384081125259399,\n  0.8398112058639526,\n  0.8412097692489624,\n  0.8426036834716797,\n  0.8439930081367493,\n  0.8453776836395264,\n  0.846757709980011,\n  0.8481330275535583,\n  0.8495035767555237,\n  0.8508694171905518,\n  0.8522304892539978,\n  0.8535867929458618,\n  0.8549382090568542,\n  0.8562847971916199,\n  0.8576264977455139,\n  0.8589633107185364,\n  0.8602951765060425,\n  0.861622154712677,\n  0.8629440665245056,\n  0.8642610311508179,\n  0.8655729293823242,\n  0.8668797612190247,\n  0.8681815266609192,\n  0.8694782257080078,\n  0.870769739151001,\n  0.8720561265945435,\n  0.8733373284339905,\n  0.874613344669342,\n  0.8758841156959534,\n  0.8771495819091797,\n  0.8784098625183105,\n  0.8796647787094116,\n  0.8809143900871277,\n  0.882158637046814,\n  0.8833975195884705,\n  0.8846309781074524,\n  0.8858590126037598,\n  0.8870816230773926,\n  0.888298749923706,\n  0.8895103931427002,\n  0.8907164931297302,\n  0.8919170498847961,\n  0.893112063407898,\n  0.8943014740943909,\n  0.8954852819442749,\n  0.89666348695755,\n  0.8978359699249268,\n  0.8990027904510498,\n  0.9001639485359192,\n  0.9013193249702454,\n  0.9024689793586731,\n  0.9036128520965576,\n  0.9047509431838989,\n  0.9058831930160522,\n  0.9070096611976624,\n  0.9081302285194397,\n  0.9092448949813843,\n  0.9103536605834961,\n  0.9114565253257751,\n  0.9125534296035767,\n  0.9136443734169006,\n  0.9147292971611023,\n  0.9158082604408264,\n  0.9168811440467834,\n  0.9179479479789734,\n  0.919008731842041,\n  0.9200634360313416,\n  0.9211119413375854,\n  0.9221543669700623,\n  0.9231905937194824,\n  0.9242206811904907,\n  0.9252445697784424,\n  0.9262621998786926,\n  0.9272736310958862,\n  0.9282787442207336,\n  0.9292776584625244,\n  0.9302701950073242,\n  0.9312564730644226,\n  0.93223637342453,\n  0.9332098960876465,\n  0.9341771006584167,\n  0.9351378679275513,\n  0.93609219789505,\n  0.9370400905609131,\n  0.9379816055297852,\n  0.9389165639877319,\n  0.939845085144043,\n  0.9407670497894287,\n  0.9416825175285339,\n  0.9425914287567139,\n  0.9434937834739685,\n  0.9443895220756531,\n  0.9452787041664124,\n  0.9461612105369568,\n  0.9470371603965759,\n  0.9479063749313354,\n  0.9487689733505249,\n  0.9496248364448547,\n  0.9504740238189697,\n  0.9513164758682251,\n  0.9521521925926208,\n  0.952981173992157,\n  0.9538033604621887,\n  0.9546187520027161,\n  0.955427348613739,\n  0.9562291502952576,\n  0.957024097442627,\n  0.9578121304512024,\n  0.9585933685302734,\n  0.9593676924705505,\n  0.9601351022720337,\n  0.9608955979347229,\n  0.9616491794586182,\n  0.9623957872390747,\n  0.9631354808807373,\n  0.9638681411743164,\n  0.9645938277244568,\n  0.9653125405311584,\n  0.9660241603851318,\n  0.9667288064956665,\n  0.9674264192581177,\n  0.9681168794631958,\n  0.9688003659248352,\n  0.9694766998291016,\n  0.9701459407806396,\n  0.9708080291748047,\n  0.9714630246162415,\n  0.9721108675003052,\n  0.9727515578269958,\n  0.9733850955963135,\n  0.9740114212036133,\n  0.9746305346488953,\n  0.9752424359321594,\n  0.9758471846580505,\n  0.9764446020126343,\n  0.977034866809845,\n  0.9776178002357483,\n  0.9781935214996338,\n  0.9787619113922119,\n  0.9793230295181274,\n  0.9798768162727356,\n  0.9804233312606812,\n  0.9809625148773193,\n  0.9814943075180054,\n  0.9820188283920288,\n  0.9825359582901001,\n  0.9830456972122192,\n  0.9835480451583862,\n  0.9840430617332458,\n  0.9845306277275085,\n  0.9850108027458191,\n  0.9854835867881775,\n  0.9859488606452942,\n  0.9864067435264587,\n  0.9868571758270264,\n  0.9873001575469971,\n  0.9877356886863708,\n  0.9881637096405029,\n  0.9885842800140381,\n  0.9889973402023315,\n  0.9894028902053833,\n  0.9898009300231934,\n  0.9901914596557617,\n  0.9905744791030884,\n  0.9909499287605286,\n  0.991317868232727,\n  0.9916782379150391,\n  0.9920310974121094,\n  0.9923763275146484,\n  0.9927140474319458,\n  0.9930441379547119,\n  0.9933667182922363,\n  0.9936816692352295,\n  0.9939889907836914,\n  0.9942887425422668,\n  0.994580864906311,\n  0.994865357875824,\n  0.9951422810554504,\n  0.9954115748405457,\n  0.9956731796264648,\n  0.9959272146224976,\n  0.9961735606193542,\n  0.9964122772216797,\n  0.9966433644294739,\n  0.996866762638092,\n  0.9970824718475342,\n  0.9972905516624451,\n  0.9974909424781799,\n  0.9976837038993835,\n  0.9978687763214111,\n  0.9980461001396179,\n  0.9982157945632935,\n  0.998377799987793,\n  0.9985321164131165,\n  0.9986786842346191,\n  0.9988176226615906,\n  0.9989488124847412,\n  0.9990723133087158,\n  0.9991881251335144,\n  0.9992961883544922,\n  0.999396562576294,\n  0.9994892477989197,\n  0.9995741844177246,\n  0.9996514320373535,\n  0.9997209310531616,\n  0.9997827410697937,\n  0.999836802482605,\n  0.9998831748962402,\n  0.9999217987060547,\n  0.9999526739120483,\n  0.999975860118866,\n  0.9999912977218628,\n  0.9999990463256836,\n  0.9999990463256836,\n  0.9999912977218628,\n  0.999975860118866,\n  0.9999526739120483,\n  0.9999217987060547,\n  0.9998831748962402,\n  0.999836802482605,\n  0.9997827410697937,\n  0.9997209310531616,\n  0.9996514320373535,\n  0.9995741844177246,\n  0.9994892477989197,\n  0.999396562576294,\n  0.9992961883544922,\n  0.9991881251335144,\n  0.9990723133087158,\n  0.9989488124847412,\n  0.9988176226615906,\n  0.9986786842346191,\n  0.9985321164131165,\n  0.998377799987793,\n  0.9982157945632935,\n  0.9980461001396179,\n  0.9978687763214111,\n  0.9976837038993835,\n  0.9974909424781799,\n  0.9972905516624451,\n  0.9970824718475342,\n  0.996866762638092,\n  0.9966433644294739,\n  0.9964122772216797,\n  0.9961735606193542,\n  0.9959272146224976,\n  0.9956731796264648,\n  0.9954115748405457,\n  0.9951422810554504,\n  0.994865357875824,\n  0.994580864906311,\n  0.9942887425422668,\n  0.9939889907836914,\n  0.9936816692352295,\n  0.9933667182922363,\n  0.9930441379547119,\n  0.9927140474319458,\n  0.9923763275146484,\n  0.9920310974121094,\n  0.9916782379150391,\n  0.991317868232727,\n  0.9909499287605286,\n  0.9905744791030884,\n  0.9901914596557617,\n  0.9898009300231934,\n  0.9894028902053833,\n  0.9889973402023315,\n  0.9885842800140381,\n  0.9881637096405029,\n  0.9877356886863708,\n  0.9873001575469971,\n  0.9868571758270264,\n  0.9864067435264587,\n  0.9859488606452942,\n  0.9854835867881775,\n  0.9850108027458191,\n  0.9845306277275085,\n  0.9840430617332458,\n  0.9835480451583862,\n  0.9830456972122192,\n  0.9825359582901001,\n  0.9820188283920288,\n  0.9814943075180054,\n  0.9809625148773193,\n  0.9804233312606812,\n  0.9798768162727356,\n  0.9793230295181274,\n  0.9787619113922119,\n  0.9781935214996338,\n  0.9776178002357483,\n  0.977034866809845,\n  0.9764446020126343,\n  0.9758471846580505,\n  0.9752424359321594,\n  0.9746305346488953,\n  0.9740114212036133,\n  0.9733850955963135,\n  0.9727515578269958,\n  0.9721108675003052,\n  0.9714630246162415,\n  0.9708080291748047,\n  0.9701459407806396,\n  0.9694766998291016,\n  0.9688003659248352,\n  0.9681168794631958,\n  0.9674264192581177,\n  0.9667288064956665,\n  0.9660241603851318,\n  0.9653125405311584,\n  0.9645938277244568,\n  0.9638681411743164,\n  0.9631354808807373,\n  0.9623957872390747,\n  0.9616491794586182,\n  0.9608955979347229,\n  0.9601351022720337,\n  0.9593676924705505,\n  0.9585933685302734,\n  0.9578121304512024,\n  0.957024097442627,\n  0.9562291502952576,\n  0.955427348613739,\n  0.9546187520027161,\n  0.9538033604621887,\n  0.952981173992157,\n  0.9521521925926208,\n  0.9513164758682251,\n  0.9504740238189697,\n  0.9496248364448547,\n  0.9487689733505249,\n  0.9479063749313354,\n  0.9470371603965759,\n  0.9461612105369568,\n  0.9452787041664124,\n  0.9443895220756531,\n  0.9434937834739685,\n  0.9425914287567139,\n  0.9416825175285339,\n  0.9407670497894287,\n  0.939845085144043,\n  0.9389165639877319,\n  0.9379816055297852,\n  0.9370400905609131,\n  0.93609219789505,\n  0.9351378679275513,\n  0.9341771006584167,\n  0.9332098960876465,\n  0.93223637342453,\n  0.9312564730644226,\n  0.9302701950073242,\n  0.9292776584625244,\n  0.9282787442207336,\n  0.9272736310958862,\n  0.9262621998786926,\n  0.9252445697784424,\n  0.9242206811904907,\n  0.9231905937194824,\n  0.9221543669700623,\n  0.9211119413375854,\n  0.9200634360313416,\n  0.919008731842041,\n  0.9179479479789734,\n  0.9168811440467834,\n  0.9158082604408264,\n  0.9147292971611023,\n  0.9136443734169006,\n  0.9125534296035767,\n  0.9114565253257751,\n  0.9103536605834961,\n  0.9092448949813843,\n  0.9081302285194397,\n  0.9070096611976624,\n  0.9058831930160522,\n  0.9047509431838989,\n  0.9036128520965576,\n  0.9024689793586731,\n  0.9013193249702454,\n  0.9001639485359192,\n  0.8990027904510498,\n  0.8978359699249268,\n  0.89666348695755,\n  0.8954852819442749,\n  0.8943014740943909,\n  0.893112063407898,\n  0.8919170498847961,\n  0.8907164931297302,\n  0.8895103931427002,\n  0.888298749923706,\n  0.8870816230773926,\n  0.8858590126037598,\n  0.8846309781074524,\n  0.8833975195884705,\n  0.882158637046814,\n  0.8809143900871277,\n  0.8796647787094116,\n  0.8784098625183105,\n  0.8771495819091797,\n  0.8758841156959534,\n  0.874613344669342,\n  0.8733373284339905,\n  0.8720561265945435,\n  0.870769739151001,\n  0.8694782257080078,\n  0.8681815266609192,\n  0.8668797612190247,\n  0.8655729293823242,\n  0.8642610311508179,\n  0.8629440665245056,\n  0.861622154712677,\n  0.8602951765060425,\n  0.8589633107185364,\n  0.8576264977455139,\n  0.8562847971916199,\n  0.8549382090568542,\n  0.8535867929458618,\n  0.8522304892539978,\n  0.8508694171905518,\n  0.8495035767555237,\n  0.8481330275535583,\n  0.846757709980011,\n  0.8453776836395264,\n  0.8439930081367493,\n  0.8426036834716797,\n  0.8412097692489624,\n  0.8398112058639526,\n  0.8384081125259399,\n  0.8370004892349243,\n  0.8355883955955505,\n  0.8341717720031738,\n  0.832750678062439,\n  0.8313251733779907,\n  0.8298952579498291,\n  0.8284609913825989,\n  0.8270223140716553,\n  0.8255794048309326,\n  0.8241321444511414,\n  0.8226805925369263,\n  0.8212248682975769,\n  0.8197648525238037,\n  0.818300724029541,\n  0.816832423210144,\n  0.8153599500656128,\n  0.8138834238052368,\n  0.8124027848243713,\n  0.8109180927276611,\n  0.809429407119751,\n  0.8079367280006409,\n  0.8064400553703308,\n  0.8049394488334656,\n  0.8034349679946899,\n  0.8019266128540039,\n  0.8004143834114075,\n  0.7988982796669006,\n  0.7973784804344177,\n  0.7958548069000244,\n  0.7943274974822998,\n  0.7927963733673096,\n  0.791261613368988,\n  0.7897232174873352,\n  0.7881811857223511,\n  0.7866355180740356,\n  0.7850863337516785,\n  0.7835335731506348,\n  0.7819772958755493,\n  0.7804175615310669,\n  0.7788543701171875,\n  0.7772877216339111,\n  0.7757176756858826,\n  0.7741442918777466,\n  0.7725675106048584,\n  0.7709874510765076,\n  0.7694041132926941,\n  0.7678175568580627,\n  0.7662277221679688,\n  0.7646346688270569,\n  0.7630385160446167,\n  0.7614391446113586,\n  0.759836733341217,\n  0.7582311630249023,\n  0.7566226124763489,\n  0.7550110220909119,\n  0.7533963918685913,\n  0.7517788410186768,\n  0.7501583099365234,\n  0.7485349178314209,\n  0.7469086647033691,\n  0.7452794909477234,\n  0.7436475157737732,\n  0.7420127987861633,\n  0.740375280380249,\n  0.738735020160675,\n  0.7370920777320862,\n  0.7354464530944824,\n  0.7337982058525085,\n  0.7321473360061646,\n  0.7304938435554504,\n  0.728837788105011,\n  0.727179229259491,\n  0.7255182266235352,\n  0.723854660987854,\n  0.7221887111663818,\n  0.7205203175544739,\n  0.7188495993614197,\n  0.7171764969825745,\n  0.7155010104179382,\n  0.7138233184814453,\n  0.7121433019638062,\n  0.7104610800743103,\n  0.7087766528129578,\n  0.7070900797843933,\n  0.7054013013839722,\n  0.7037104368209839,\n  0.7020174860954285,\n  0.7003224492073059,\n  0.6986254453659058,\n  0.6969263553619385,\n  0.6952253580093384,\n  0.6935223937034607,\n  0.6918175220489502,\n  0.6901107430458069,\n  0.6884021759033203,\n  0.6866917610168457,\n  0.6849794983863831,\n  0.6832655072212219,\n  0.6815497875213623,\n  0.6798323392868042,\n  0.6781132221221924,\n  0.6763924956321716,\n  0.6746701002120972,\n  0.6729461550712585,\n  0.671220600605011,\n  0.669493556022644,\n  0.6677649617195129,\n  0.6660349369049072,\n  0.6643034815788269,\n  0.6625705361366272,\n  0.6608362793922424,\n  0.6591006517410278,\n  0.6573636531829834,\n  0.6556254029273987,\n  0.6538858413696289,\n  0.6521450877189636,\n  0.6504030823707581,\n  0.648659884929657,\n  0.6469155550003052,\n  0.6451701521873474,\n  0.6434235572814941,\n  0.6416759490966797,\n  0.639927327632904,\n  0.6381776332855225,\n  0.6364269852638245,\n  0.6346753835678101,\n  0.6329228281974792,\n  0.6311694383621216,\n  0.6294151544570923,\n  0.6276600360870361,\n  0.6259040832519531,\n  0.624147355556488,\n  0.6223899126052856,\n  0.6206316947937012,\n  0.6188728213310242,\n  0.6171132326126099,\n  0.6153530478477478,\n  0.6135922074317932,\n  0.6118308305740356,\n  0.6100688576698303,\n  0.6083064079284668,\n  0.6065434217453003,\n  0.6047799587249756,\n  0.6030160784721375,\n  0.6012517809867859,\n  0.5994871258735657,\n  0.597722053527832,\n  0.5959566831588745,\n  0.5941910147666931,\n  0.5924250483512878,\n  0.5906588435173035,\n  0.58889240026474,\n  0.5871257781982422,\n  0.5853589773178101,\n  0.5835920572280884,\n  0.5818250179290771,\n  0.5800579190254211,\n  0.5782907605171204,\n  0.5765235424041748,\n  0.574756383895874,\n  0.5729891657829285,\n  0.5712220668792725,\n  0.5694550275802612,\n  0.5676881074905396,\n  0.5659213066101074,\n  0.5641546249389648,\n  0.5623881816864014,\n  0.560621976852417,\n  0.5588559508323669,\n  0.5570902228355408,\n  0.5553247928619385,\n  0.5535597205162048,\n  0.5517949461936951,\n  0.550030529499054,\n  0.5482665300369263,\n  0.5465030074119568,\n  0.544739842414856,\n  0.5429772138595581,\n  0.5412151217460632,\n  0.5394535064697266,\n  0.5376924872398376,\n  0.5359320044517517,\n  0.5341721773147583,\n  0.5324129462242126,\n  0.5306543707847595,\n  0.5288965106010437,\n  0.5271393060684204,\n  0.5253828763961792,\n  0.5236272215843201,\n  0.521872341632843,\n  0.5201182961463928,\n  0.5183650255203247,\n  0.516612708568573,\n  0.5148612260818481,\n  0.5131106376647949,\n  0.5113610029220581,\n  0.5096123218536377,\n  0.5078646540641785,\n  0.5061179399490356,\n  0.5043722987174988,\n  0.5026277303695679,\n  0.5008842349052429,\n  0.4991418123245239,\n  0.49740055203437805,\n  0.4956604540348053,\n  0.49392154812812805,\n  0.4921838045120239,\n  0.4904473125934601,\n  0.4887120723724365,\n  0.48697811365127563,\n  0.4852454662322998,\n  0.48351410031318665,\n  0.4817841053009033,\n  0.48005548119544983,\n  0.47832825779914856,\n  0.4766024351119995,\n  0.47487807273864746,\n  0.47315514087677,\n  0.47143369913101196,\n  0.4697137773036957,\n  0.46799540519714355,\n  0.4662785530090332,\n  0.4645632803440094,\n  0.46284961700439453,\n  0.4611375629901886,\n  0.4594271779060364,\n  0.4577184319496155,\n  0.4560113847255707,\n  0.454306036233902,\n  0.45260241627693176,\n  0.4509005546569824,\n  0.44920048117637634,\n  0.4475021958351135,\n  0.44580569863319397,\n  0.44411107897758484,\n  0.44241830706596375,\n  0.4407274127006531,\n  0.4390384256839752,\n  0.43735137581825256,\n  0.4356662333011627,\n  0.43398308753967285,\n  0.43230193853378296,\n  0.43062275648117065,\n  0.4289456307888031,\n  0.4272705614566803,\n  0.42559751868247986,\n  0.42392659187316895,\n  0.42225778102874756,\n  0.4205910861492157,\n  0.41892656683921814,\n  0.4172641932964325,\n  0.41560399532318115,\n  0.4139460325241089,\n  0.4122902750968933,\n  0.4106367826461792,\n  0.40898555517196655,\n  0.40733659267425537,\n  0.40568995475769043,\n  0.40404564142227173,\n  0.40240365266799927,\n  0.4007640480995178,\n  0.399126797914505,\n  0.3974919617176056,\n  0.3958595395088196,\n  0.39422956109046936,\n  0.39260202646255493,\n  0.39097699522972107,\n  0.389354407787323,\n  0.3877343535423279,\n  0.3861168324947357,\n  0.3845018446445465,\n  0.38288941979408264,\n  0.3812795877456665,\n  0.3796723186969757,\n  0.3780677020549774,\n  0.37646567821502686,\n  0.3748663365840912,\n  0.373269647359848,\n  0.37167564034461975,\n  0.37008431553840637,\n  0.36849573254585266,\n  0.36690986156463623,\n  0.36532676219940186,\n  0.36374640464782715,\n  0.3621688485145569,\n  0.3605940639972687,\n  0.3590221107006073,\n  0.35745298862457275,\n  0.3558867275714874,\n  0.35432329773902893,\n  0.35276275873184204,\n  0.35120511054992676,\n  0.3496503531932831,\n  0.3480985164642334,\n  0.3465496301651001,\n  0.34500372409820557,\n  0.34346073865890503,\n  0.34192076325416565,\n  0.34038376808166504,\n  0.338849812746048,\n  0.3373188376426697,\n  0.3357909321784973,\n  0.3342660963535309,\n  0.332744300365448,\n  0.33122560381889343,\n  0.3297099769115448,\n  0.3281974792480469,\n  0.32668811082839966,\n  0.32518187165260315,\n  0.32367879152297974,\n  0.3221788704395294,\n  0.3206821084022522,\n  0.31918856501579285,\n  0.317698210477829,\n  0.316211074590683,\n  0.31472715735435486,\n  0.313246488571167,\n  0.3117690682411194,\n  0.3102949261665344,\n  0.3088240623474121,\n  0.30735647678375244,\n  0.3058921992778778,\n  0.3044312298297882,\n  0.30297359824180603,\n  0.3015192747116089,\n  0.30006834864616394,\n  0.2986207604408264,\n  0.2971765398979187,\n  0.2957356870174408,\n  0.2942982614040375,\n  0.29286420345306396,\n  0.2914336025714874,\n  0.2900063991546631,\n  0.2885826528072357,\n  0.28716233372688293,\n  0.2857455015182495,\n  0.28433212637901306,\n  0.2829222083091736,\n  0.28151580691337585,\n  0.2801128923892975,\n  0.27871349453926086,\n  0.2773175835609436,\n  0.27592524886131287,\n  0.2745364308357239,\n  0.273151159286499,\n  0.2717694342136383,\n  0.2703912854194641,\n  0.26901671290397644,\n  0.2676457166671753,\n  0.26627829670906067,\n  0.26491451263427734,\n  0.26355430483818054,\n  0.26219773292541504,\n  0.26084479689598083,\n  0.25949546694755554,\n  0.25814980268478394,\n  0.25680777430534363,\n  0.255469411611557,\n  0.2541347146034241,\n  0.2528036832809448,\n  0.25147634744644165,\n  0.25015267729759216,\n  0.24883271753787994,\n  0.247516468167305,\n  0.24620391428470612,\n  0.2448950856924057,\n  0.24358998239040375,\n  0.24228860437870026,\n  0.24099096655845642,\n  0.23969706892967224,\n  0.2384069263935089,\n  0.23712053894996643,\n  0.2358379065990448,\n  0.2345590442419052,\n  0.23328396677970886,\n  0.23201265931129456,\n  0.23074515163898468,\n  0.22948141396045685,\n  0.22822149097919464,\n  0.22696536779403687,\n  0.22571304440498352,\n  0.2244645357131958,\n  0.2232198417186737,\n  0.22197897732257843,\n  0.22074194252490997,\n  0.21950873732566833,\n  0.2182793766260147,\n  0.2170538455247879,\n  0.2158321589231491,\n  0.21461433172225952,\n  0.21340034902095795,\n  0.21219024062156677,\n  0.2109839767217636,\n  0.20978158712387085,\n  0.2085830718278885,\n  0.20738841593265533,\n  0.20619764924049377,\n  0.20501075685024261,\n  0.20382775366306305,\n  0.20264863967895508,\n  0.2014734148979187,\n  0.20030207931995392,\n  0.19913463294506073,\n  0.19797109067440033,\n  0.19681145250797272,\n  0.1956557184457779,\n  0.19450388848781586,\n  0.1933559775352478,\n  0.19221197068691254,\n  0.19107186794281006,\n  0.18993568420410156,\n  0.18880343437194824,\n  0.1876750886440277,\n  0.18655066192150116,\n  0.1854301542043686,\n  0.1843135803937912,\n  0.1832009255886078,\n  0.18209220468997955,\n  0.1809874027967453,\n  0.17988653481006622,\n  0.17878960072994232,\n  0.1776966005563736,\n  0.17660751938819885,\n  0.17552238702774048,\n  0.1744411736726761,\n  0.17336389422416687,\n  0.17229054868221283,\n  0.17122115194797516,\n  0.17015567421913147,\n  0.16909414529800415,\n  0.1680365353822708,\n  0.16698287427425385,\n  0.16593313217163086,\n  0.16488733887672424,\n  0.1638454794883728,\n  0.16280755400657654,\n  0.16177354753017426,\n  0.16074348986148834,\n  0.1597173511981964,\n  0.15869516134262085,\n  0.15767689049243927,\n  0.15666253864765167,\n  0.15565213561058044,\n  0.1546456515789032,\n  0.15364308655261993,\n  0.15264445543289185,\n  0.15164974331855774,\n  0.15065895020961761,\n  0.14967207610607147,\n  0.1486891210079193,\n  0.14771008491516113,\n  0.14673495292663574,\n  0.14576375484466553,\n  0.1447964459657669,\n  0.14383305609226227,\n  0.14287357032299042,\n  0.14191798865795135,\n  0.14096631109714508,\n  0.1400185227394104,\n  0.1390746384859085,\n  0.1381346434354782,\n  0.1371985375881195,\n  0.1362663209438324,\n  0.13533799350261688,\n  0.13441354036331177,\n  0.13349297642707825,\n  0.13257628679275513,\n  0.1316634565591812,\n  0.1307545006275177,\n  0.1298494189977646,\n  0.12894819676876068,\n  0.12805083394050598,\n  0.1271573156118393,\n  0.12626765668392181,\n  0.12538185715675354,\n  0.12449987977743149,\n  0.12362175434827805,\n  0.12274745851755142,\n  0.12187699973583221,\n  0.12101037055253983,\n  0.12014755606651306,\n  0.11928856372833252,\n  0.1184333935379982,\n  0.11758202314376831,\n  0.11673445999622345,\n  0.11589070409536362,\n  0.11505074054002762,\n  0.11421456187963486,\n  0.11338218301534653,\n  0.11255357414484024,\n  0.11172875016927719,\n  0.11090768873691559,\n  0.11009040474891663,\n  0.10927687585353851,\n  0.10846710205078125,\n  0.10766108334064484,\n  0.10685880482196808,\n  0.10606027394533157,\n  0.10526546835899353,\n  0.10447440296411514,\n  0.10368705540895462,\n  0.10290341824293137,\n  0.10212350636720657,\n  0.10134728997945786,\n  0.10057477653026581,\n  0.09980596601963043,\n  0.09904083609580994,\n  0.09827938675880432,\n  0.09752161800861359,\n  0.09676751494407654,\n  0.09601707756519318,\n  0.0952702984213829,\n  0.09452717006206512,\n  0.09378768503665924,\n  0.09305184334516525,\n  0.09231963008642197,\n  0.09159103780984879,\n  0.0908660739660263,\n  0.09014471620321274,\n  0.08942695707082748,\n  0.08871280401945114,\n  0.08800224214792252,\n  0.08729526400566101,\n  0.08659186214208603,\n  0.08589203655719757,\n  0.08519576489925385,\n  0.08450305461883545,\n  0.08381389826536179,\n  0.08312828093767166,\n  0.08244619518518448,\n  0.08176764100790024,\n  0.08109260350465775,\n  0.080421082675457,\n  0.07975306361913681,\n  0.07908854633569717,\n  0.0784275159239769,\n  0.07776997238397598,\n  0.07711590081453323,\n  0.07646530121564865,\n  0.07581815868616104,\n  0.07517446577548981,\n  0.07453422248363495,\n  0.07389741390943527,\n  0.07326403260231018,\n  0.07263407856225967,\n  0.07200752943754196,\n  0.07138439267873764,\n  0.07076465338468552,\n  0.0701482966542244,\n  0.06953532248735428,\n  0.06892572343349457,\n  0.06831949204206467,\n  0.06771661341190338,\n  0.06711708754301071,\n  0.06652089953422546,\n  0.06592804193496704,\n  0.06533850729465485,\n  0.06475229561328888,\n  0.06416938453912735,\n  0.06358977407217026,\n  0.06301344931125641,\n  0.0624404102563858,\n  0.061870645731687546,\n  0.06130414456129074,\n  0.06074089929461479,\n  0.0601809024810791,\n  0.05962414667010307,\n  0.05907062068581581,\n  0.05852031335234642,\n  0.0579732209444046,\n  0.05742933601140976,\n  0.0568886436522007,\n  0.05635114014148712,\n  0.05581681802868843,\n  0.05528566241264343,\n  0.05475766584277153,\n  0.054232824593782425,\n  0.05371112376451492,\n  0.053192559629678726,\n  0.05267712101340294,\n  0.052164800465106964,\n  0.05165558680891991,\n  0.05114947259426117,\n  0.05064644664525986,\n  0.05014650523662567,\n  0.04964963346719742,\n  0.0491558238863945,\n  0.04866506904363632,\n  0.048177361488342285,\n  0.047692690044641495,\n  0.047211043536663055,\n  0.04673241823911667,\n  0.04625679925084114,\n  0.04578418284654617,\n  0.04531455785036087,\n  0.04484791308641434,\n  0.04438424110412598,\n  0.04392353445291519,\n  0.043465785682201385,\n  0.043010979890823364,\n  0.04255910962820053,\n  0.04211016744375229,\n  0.04166414588689804,\n  0.04122103005647659,\n  0.040780819952487946,\n  0.040343496948480606,\n  0.039909057319164276,\n  0.03947748988866806,\n  0.03904878720641136,\n  0.03862294182181358,\n  0.03819993883371353,\n  0.03777977451682091,\n  0.03736243396997452,\n  0.03694791719317436,\n  0.03653620555996895,\n  0.03612729534506798,\n  0.035721179097890854,\n  0.03531784191727638,\n  0.034917280077934265,\n  0.03451947867870331,\n  0.03412443771958351,\n  0.03373213857412338,\n  0.03334257751703262,\n  0.03295574337244034,\n  0.03257162868976593,\n  0.032190222293138504,\n  0.03181151673197746,\n  0.03143550455570221,\n  0.03106217458844185,\n  0.030691517516970634,\n  0.03032352589070797,\n  0.029958190396428108,\n  0.029595499858260155,\n  0.02923545055091381,\n  0.028878027573227882,\n  0.028523225337266922,\n  0.028171034529805183,\n  0.02782144583761692,\n  0.027474451810121536,\n  0.027130041271448135,\n  0.02678820677101612,\n  0.026448940858244896,\n  0.026112230494618416,\n  0.025778071954846382,\n  0.0254464540630579,\n  0.02511736750602722,\n  0.024790804833173752,\n  0.024466756731271744,\n  0.02414521388709545,\n  0.023826168850064278,\n  0.023509612306952477,\n  0.02319553680717945,\n  0.022883933037519455,\n  0.022574791684746742,\n  0.022268105298280716,\n  0.02196386456489563,\n  0.021662062034010887,\n  0.02136269025504589,\n  0.021065736189484596,\n  0.020771196112036705,\n  0.02047906070947647,\n  0.020189320668578148,\n  0.01990196853876114,\n  0.019616995006799698,\n  0.01933439075946808,\n  0.019054152071475983,\n  0.018776265904307365,\n  0.01850072853267193,\n  0.018227526918053627,\n  0.017956657335162163,\n  0.01768810860812664,\n  0.017421875149011612,\n  0.01715794764459133,\n  0.016896318644285202,\n  0.016636978834867477,\n  0.01637992262840271,\n  0.016125140711665154,\n  0.01587262563407421,\n  0.015622369945049286,\n  0.015374365262687206,\n  0.01512860506772995,\n  0.01488508004695177,\n  0.014643783681094646,\n  0.014404707588255405,\n  0.014167845249176025,\n  0.01393318921327591,\n  0.013700730167329311,\n  0.013470463454723358,\n  0.013242379762232304,\n  0.01301647163927555,\n  0.012792733497917652,\n  0.012571156024932861,\n  0.01235173363238573,\n  0.012134457938373089,\n  0.011919323354959488,\n  0.011706321500241756,\n  0.011495444923639297,\n  0.011286688037216663,\n  0.011080043390393257,\n  0.010875504463911057,\n  0.01067306287586689,\n  0.010472713969647884,\n  0.010274449363350868,\n  0.01007826253771782,\n  0.00988414790481329,\n  0.009692097082734108,\n  0.009502105414867401,\n  0.009314165450632572,\n  0.009128270670771599,\n  0.008944414556026459,\n  0.00876259058713913,\n  0.008582794107496738,\n  0.008405016735196114,\n  0.008229252882301807,\n  0.008055496960878372,\n  0.007883742451667786,\n  0.0077139828354120255,\n  0.007546212989836931,\n  0.007380426395684481,\n  0.007216617465019226,\n  0.0070547801442444324,\n  0.006894908845424652,\n  0.00673699751496315,\n  0.0065810405649244785,\n  0.00642703240737319,\n  0.0062749674543738365,\n  0.006124840117990971,\n  0.0059766448102891445,\n  0.005830376874655485,\n  0.0056860302574932575,\n  0.005543599370867014,\n  0.005403079558163881,\n  0.005264465697109699,\n  0.00512775219976902,\n  0.004992934409528971,\n  0.004860007204115391,\n  0.00472896546125412,\n  0.004599804524332285,\n  0.0044725192710757256,\n  0.004347105044871569,\n  0.004223557189106941,\n  0.00410187104716897,\n  0.003982041962444782,\n  0.0038640655111521482,\n  0.003747937036678195,\n  0.003633652115240693,\n  0.0035212067887187004,\n  0.0034105961676687002,\n  0.003301816526800394,\n  0.0031948634423315525,\n  0.00308973272331059,\n  0.0029864206444472075,\n  0.002884922781959176,\n  0.002785235643386841,\n  0.002687355037778616,\n  0.0025912774726748466,\n  0.002496998989954591,\n  0.00240451586432755,\n  0.002313824836164713,\n  0.0022249219473451376,\n  0.002137803938239813,\n  0.0020524675492197275,\n  0.001968909054994583,\n  0.0018871253123506904,\n  0.0018071132944896817,\n  0.0017288696253672242,\n  0.0016523912781849504,\n  0.0015776753425598145,\n  0.0015047186752781272,\n  0.0014335184823721647,\n  0.0013640718534588814,\n  0.001296376227401197,\n  0.0012304286938160658,\n  0.0011662266915664077,\n  0.0011037677759304643,\n  0.0010430492693558335,\n  0.000984068843536079,\n  0.0009268240537494421,\n  0.0008713127463124692,\n  0.0008175325347110629,\n  0.0007654813816770911,\n  0.0007151571335271001,\n  0.0006665578112006187,\n  0.0006196813774295151,\n  0.0005745260277763009,\n  0.000531089841388166,\n  0.0004893711884506047,\n  0.00044936826452612877,\n  0.000411079527111724,\n  0.0003745033754967153,\n  0.0003396383544895798,\n  0.00030648306710645556,\n  0.00027503614546731114,\n  0.000245296279899776,\n  0.00021726233535446227,\n  0.00019093311857432127,\n  0.00016630758182145655,\n  0.00014338470646180212,\n  0.0001221635757246986,\n  0.00010264330921927467,\n  8.4823121142108e-05,\n  6.870229117339477e-05,\n  5.42801535630133e-05,\n  4.1556122596375644e-05,\n  3.052967804251239e-05,\n  2.1200372430030257e-05,\n  1.3567823771154508e-05,\n  7.631719199707732e-06,\n  3.391817472220282e-06,\n  8.479456710119848e-07,\n  -1.3877787807814457e-17\n]\n"
  },
  {
    "path": "__tests__/data/blackman256.json",
    "content": "[\n  -1.3877787807814457e-17,\n  5.465338836074807e-05,\n  0.0002187572099501267,\n  0.0004927419940941036,\n  0.0008773234440013766,\n  0.0013735000975430012,\n  0.001982549438253045,\n  0.0027060233987867832,\n  0.003545743180438876,\n  0.004503792151808739,\n  0.005582507699728012,\n  0.006784474011510611,\n  0.008112512528896332,\n  0.009569671005010605,\n  0.011159210465848446,\n  0.012884598225355148,\n  0.014749490655958652,\n  0.016757719218730927,\n  0.018913280218839645,\n  0.021220317110419273,\n  0.023683100938796997,\n  0.026306021958589554,\n  0.02909356914460659,\n  0.03205030784010887,\n  0.035180870443582535,\n  0.0384899266064167,\n  0.04198218509554863,\n  0.045662347227334976,\n  0.049535106867551804,\n  0.05360512435436249,\n  0.057877011597156525,\n  0.062355298548936844,\n  0.06704442948102951,\n  0.07194873690605164,\n  0.07707241922616959,\n  0.0824195146560669,\n  0.08799390494823456,\n  0.09379925578832626,\n  0.09983905404806137,\n  0.10611651837825775,\n  0.11263464391231537,\n  0.1193961501121521,\n  0.12640348076820374,\n  0.1336587518453598,\n  0.14116378128528595,\n  0.14892004430294037,\n  0.1569286733865738,\n  0.1651904284954071,\n  0.17370566725730896,\n  0.18247437477111816,\n  0.19149614870548248,\n  0.20077013969421387,\n  0.21029508113861084,\n  0.22006924450397491,\n  0.23009051382541656,\n  0.2403562366962433,\n  0.25086337327957153,\n  0.261608362197876,\n  0.2725871801376343,\n  0.28379538655281067,\n  0.295227974653244,\n  0.3068794906139374,\n  0.318744033575058,\n  0.3308151960372925,\n  0.34308603405952454,\n  0.35554927587509155,\n  0.3681969940662384,\n  0.38102099299430847,\n  0.3940124213695526,\n  0.4071621298789978,\n  0.42046046257019043,\n  0.43389734625816345,\n  0.4474622309207916,\n  0.46114426851272583,\n  0.47493213415145874,\n  0.488814115524292,\n  0.502778172492981,\n  0.5168119072914124,\n  0.530902624130249,\n  0.5450371503829956,\n  0.5592021942138672,\n  0.5733842253684998,\n  0.5875691771507263,\n  0.6017430424690247,\n  0.6158915162086487,\n  0.6299999952316284,\n  0.6440538167953491,\n  0.6580381989479065,\n  0.6719380617141724,\n  0.6857385039329529,\n  0.6994242668151855,\n  0.712980329990387,\n  0.7263913750648499,\n  0.739642322063446,\n  0.7527180314064026,\n  0.7656033635139465,\n  0.778283417224884,\n  0.7907432317733765,\n  0.8029680848121643,\n  0.8149434328079224,\n  0.8266549110412598,\n  0.8380883932113647,\n  0.8492298722267151,\n  0.860065758228302,\n  0.8705826997756958,\n  0.8807676434516907,\n  0.8906079530715942,\n  0.9000912308692932,\n  0.9092056751251221,\n  0.9179396033287048,\n  0.9262821078300476,\n  0.934222400188446,\n  0.9417504668235779,\n  0.9488565325737,\n  0.9555315375328064,\n  0.96176677942276,\n  0.9675542116165161,\n  0.972886323928833,\n  0.9777562022209167,\n  0.9821574091911316,\n  0.9860843420028687,\n  0.9895316958427429,\n  0.992495059967041,\n  0.9949705004692078,\n  0.9969547986984253,\n  0.9984453320503235,\n  0.99944007396698,\n  0.9999377727508545,\n  0.9999377727508545,\n  0.99944007396698,\n  0.9984453320503235,\n  0.9969547986984253,\n  0.9949705004692078,\n  0.992495059967041,\n  0.9895316958427429,\n  0.9860843420028687,\n  0.9821574091911316,\n  0.9777562022209167,\n  0.972886323928833,\n  0.9675542116165161,\n  0.96176677942276,\n  0.9555315375328064,\n  0.9488565325737,\n  0.9417504668235779,\n  0.934222400188446,\n  0.9262821078300476,\n  0.9179396033287048,\n  0.9092056751251221,\n  0.9000912308692932,\n  0.8906079530715942,\n  0.8807676434516907,\n  0.8705826997756958,\n  0.860065758228302,\n  0.8492298722267151,\n  0.8380883932113647,\n  0.8266549110412598,\n  0.8149434328079224,\n  0.8029680848121643,\n  0.7907432317733765,\n  0.778283417224884,\n  0.7656033635139465,\n  0.7527180314064026,\n  0.739642322063446,\n  0.7263913750648499,\n  0.712980329990387,\n  0.6994242668151855,\n  0.6857385039329529,\n  0.6719380617141724,\n  0.6580381989479065,\n  0.6440538167953491,\n  0.6299999952316284,\n  0.6158915162086487,\n  0.6017430424690247,\n  0.5875691771507263,\n  0.5733842253684998,\n  0.5592021942138672,\n  0.5450371503829956,\n  0.530902624130249,\n  0.5168119072914124,\n  0.502778172492981,\n  0.488814115524292,\n  0.47493213415145874,\n  0.46114426851272583,\n  0.4474622309207916,\n  0.43389734625816345,\n  0.42046046257019043,\n  0.4071621298789978,\n  0.3940124213695526,\n  0.38102099299430847,\n  0.3681969940662384,\n  0.35554927587509155,\n  0.34308603405952454,\n  0.3308151960372925,\n  0.318744033575058,\n  0.3068794906139374,\n  0.295227974653244,\n  0.28379538655281067,\n  0.2725871801376343,\n  0.261608362197876,\n  0.25086337327957153,\n  0.2403562366962433,\n  0.23009051382541656,\n  0.22006924450397491,\n  0.21029508113861084,\n  0.20077013969421387,\n  0.19149614870548248,\n  0.18247437477111816,\n  0.17370566725730896,\n  0.1651904284954071,\n  0.1569286733865738,\n  0.14892004430294037,\n  0.14116378128528595,\n  0.1336587518453598,\n  0.12640348076820374,\n  0.1193961501121521,\n  0.11263464391231537,\n  0.10611651837825775,\n  0.09983905404806137,\n  0.09379925578832626,\n  0.08799390494823456,\n  0.0824195146560669,\n  0.07707241922616959,\n  0.07194873690605164,\n  0.06704442948102951,\n  0.062355298548936844,\n  0.057877011597156525,\n  0.05360512435436249,\n  0.049535106867551804,\n  0.045662347227334976,\n  0.04198218509554863,\n  0.0384899266064167,\n  0.035180870443582535,\n  0.03205030784010887,\n  0.02909356914460659,\n  0.026306021958589554,\n  0.023683100938796997,\n  0.021220317110419273,\n  0.018913280218839645,\n  0.016757719218730927,\n  0.014749490655958652,\n  0.012884598225355148,\n  0.011159210465848446,\n  0.009569671005010605,\n  0.008112512528896332,\n  0.006784474011510611,\n  0.005582507699728012,\n  0.004503792151808739,\n  0.003545743180438876,\n  0.0027060233987867832,\n  0.001982549438253045,\n  0.0013735000975430012,\n  0.0008773234440013766,\n  0.0004927419940941036,\n  0.0002187572099501267,\n  5.465338836074807e-05,\n  -1.3877787807814457e-17\n]\n"
  },
  {
    "path": "__tests__/data/blackman512.json",
    "content": "[\n  -1.3877787807814457e-17,\n  1.3607682376459707e-05,\n  5.44396425539162e-05,\n  0.0001225226151291281,\n  0.00021790112077724189,\n  0.00034063743078149855,\n  0.0004908115370199084,\n  0.0006685210973955691,\n  0.000873881159350276,\n  0.001107024378143251,\n  0.0013681006385013461,\n  0.0016572769964113832,\n  0.0019747375044971704,\n  0.002320683328434825,\n  0.002695332048460841,\n  0.0030989176593720913,\n  0.0035316909197717905,\n  0.003993918187916279,\n  0.004485881421715021,\n  0.005007879342883825,\n  0.0055602239444851875,\n  0.006143244449049234,\n  0.006757283117622137,\n  0.007402697112411261,\n  0.00807985756546259,\n  0.008789150044322014,\n  0.009530973620712757,\n  0.01030573807656765,\n  0.011113868094980717,\n  0.011955800466239452,\n  0.012831982225179672,\n  0.013742873445153236,\n  0.0146889453753829,\n  0.01567067764699459,\n  0.01668856292963028,\n  0.017743101343512535,\n  0.018834801390767097,\n  0.01996418461203575,\n  0.02113177441060543,\n  0.022338109090924263,\n  0.023583726957440376,\n  0.024869179353117943,\n  0.026195017620921135,\n  0.02756180427968502,\n  0.028970103710889816,\n  0.030420485883951187,\n  0.03191352263092995,\n  0.033449795097112656,\n  0.035029876977205276,\n  0.036654356867074966,\n  0.03832381218671799,\n  0.040038831532001495,\n  0.04179999977350235,\n  0.04360789805650711,\n  0.04546311870217323,\n  0.04736623540520668,\n  0.04931783303618431,\n  0.051318492740392685,\n  0.05336878448724747,\n  0.05546928569674492,\n  0.05762055516242981,\n  0.059823162853717804,\n  0.062077656388282776,\n  0.0643845945596695,\n  0.06674451380968094,\n  0.06915795803070068,\n  0.07162544131278992,\n  0.07414749264717102,\n  0.07672461867332458,\n  0.07935731112957001,\n  0.08204606920480728,\n  0.08479136973619461,\n  0.08759366720914841,\n  0.09045342355966568,\n  0.09337107837200165,\n  0.09634705632925034,\n  0.09938176721334457,\n  0.1024756133556366,\n  0.10562896728515625,\n  0.10884220153093338,\n  0.11211567372083664,\n  0.1154496967792511,\n  0.11884460598230362,\n  0.12230068445205688,\n  0.12581820785999298,\n  0.1293974369764328,\n  0.13303862512111664,\n  0.1367419809103012,\n  0.14050769805908203,\n  0.14433594048023224,\n  0.14822690188884735,\n  0.15218067169189453,\n  0.15619738399982452,\n  0.1602771282196045,\n  0.16441994905471802,\n  0.16862590610980988,\n  0.17289499938488007,\n  0.17722724378108978,\n  0.18162256479263306,\n  0.1860809326171875,\n  0.19060224294662476,\n  0.19518640637397766,\n  0.19983325898647308,\n  0.20454265177249908,\n  0.20931439101696014,\n  0.21414823830127716,\n  0.21904397010803223,\n  0.22400128841400146,\n  0.2290199100971222,\n  0.23409949243068695,\n  0.2392396628856659,\n  0.24444004893302917,\n  0.24970023334026337,\n  0.25501975417137146,\n  0.26039811968803406,\n  0.26583486795425415,\n  0.27132943272590637,\n  0.27688124775886536,\n  0.28248974680900574,\n  0.2881542444229126,\n  0.2938741445541382,\n  0.2996487319469452,\n  0.3054772913455963,\n  0.31135910749435425,\n  0.31729334592819214,\n  0.3232792913913727,\n  0.32931602001190186,\n  0.3354027271270752,\n  0.3415384888648987,\n  0.3477224111557007,\n  0.3539535105228424,\n  0.36023083329200745,\n  0.3665533661842346,\n  0.37292003631591797,\n  0.3793298304080963,\n  0.3857816159725189,\n  0.39227429032325745,\n  0.39880669116973877,\n  0.40537765622138977,\n  0.41198593378067017,\n  0.41863036155700684,\n  0.4253096282482147,\n  0.43202248215675354,\n  0.43876758217811584,\n  0.4455436170101166,\n  0.4523491859436035,\n  0.4591829478740692,\n  0.46604350209236145,\n  0.47292935848236084,\n  0.4798390865325928,\n  0.48677122592926025,\n  0.4937242269515991,\n  0.50069659948349,\n  0.5076868534088135,\n  0.5146933197975159,\n  0.521714448928833,\n  0.528748631477356,\n  0.535794198513031,\n  0.542849600315094,\n  0.5499131679534912,\n  0.5569831132888794,\n  0.5640578269958496,\n  0.5711356401443481,\n  0.5782146453857422,\n  0.5852932929992676,\n  0.5923697352409363,\n  0.599442183971405,\n  0.6065089106559753,\n  0.613568127155304,\n  0.6206179261207581,\n  0.6276565790176392,\n  0.6346822381019592,\n  0.6416930556297302,\n  0.6486871838569641,\n  0.6556628346443176,\n  0.6626180410385132,\n  0.6695510149002075,\n  0.6764598488807678,\n  0.683342695236206,\n  0.6901976466178894,\n  0.6970228552818298,\n  0.7038164138793945,\n  0.7105764150619507,\n  0.7173009514808655,\n  0.7239882349967957,\n  0.7306362986564636,\n  0.7372432947158813,\n  0.7438073754310608,\n  0.7503265738487244,\n  0.756799042224884,\n  0.7632229328155518,\n  0.7695963978767395,\n  0.7759175896644592,\n  0.7821846008300781,\n  0.7883956432342529,\n  0.7945488691329956,\n  0.8006424903869629,\n  0.806674599647522,\n  0.8126435279846191,\n  0.8185474276542664,\n  0.8243845105171204,\n  0.8301530480384827,\n  0.83585125207901,\n  0.8414774537086487,\n  0.8470299243927002,\n  0.8525069355964661,\n  0.8579068183898926,\n  0.8632279634475708,\n  0.8684687614440918,\n  0.8736274838447571,\n  0.8787025809288025,\n  0.8836924433708191,\n  0.8885956406593323,\n  0.8934105634689331,\n  0.8981356620788574,\n  0.9027695059776306,\n  0.9073106646537781,\n  0.9117576479911804,\n  0.9161090850830078,\n  0.9203636050224304,\n  0.9245198965072632,\n  0.9285765290260315,\n  0.9325323104858398,\n  0.936385989189148,\n  0.9401362538337708,\n  0.9437819719314575,\n  0.9473219513893127,\n  0.9507550597190857,\n  0.9540801644325256,\n  0.9572962522506714,\n  0.9604023098945618,\n  0.963397204875946,\n  0.9662801027297974,\n  0.9690499901771545,\n  0.9717060327529907,\n  0.9742472767829895,\n  0.9766730070114136,\n  0.9789823889732361,\n  0.981174647808075,\n  0.9832491278648376,\n  0.9852050542831421,\n  0.9870418906211853,\n  0.9887589812278748,\n  0.9903557896614075,\n  0.9918317794799805,\n  0.9931864738464355,\n  0.9944194555282593,\n  0.9955302476882935,\n  0.9965185523033142,\n  0.9973840713500977,\n  0.9981264472007751,\n  0.9987454414367676,\n  0.9992409348487854,\n  0.9996126294136047,\n  0.9998605251312256,\n  0.9999845027923584,\n  0.9999845027923584,\n  0.9998605251312256,\n  0.9996126294136047,\n  0.9992409348487854,\n  0.9987454414367676,\n  0.9981264472007751,\n  0.9973840713500977,\n  0.9965185523033142,\n  0.9955302476882935,\n  0.9944194555282593,\n  0.9931864738464355,\n  0.9918317794799805,\n  0.9903557896614075,\n  0.9887589812278748,\n  0.9870418906211853,\n  0.9852050542831421,\n  0.9832491278648376,\n  0.981174647808075,\n  0.9789823889732361,\n  0.9766730070114136,\n  0.9742472767829895,\n  0.9717060327529907,\n  0.9690499901771545,\n  0.9662801027297974,\n  0.963397204875946,\n  0.9604023098945618,\n  0.9572962522506714,\n  0.9540801644325256,\n  0.9507550597190857,\n  0.9473219513893127,\n  0.9437819719314575,\n  0.9401362538337708,\n  0.936385989189148,\n  0.9325323104858398,\n  0.9285765290260315,\n  0.9245198965072632,\n  0.9203636050224304,\n  0.9161090850830078,\n  0.9117576479911804,\n  0.9073106646537781,\n  0.9027695059776306,\n  0.8981356620788574,\n  0.8934105634689331,\n  0.8885956406593323,\n  0.8836924433708191,\n  0.8787025809288025,\n  0.8736274838447571,\n  0.8684687614440918,\n  0.8632279634475708,\n  0.8579068183898926,\n  0.8525069355964661,\n  0.8470299243927002,\n  0.8414774537086487,\n  0.83585125207901,\n  0.8301530480384827,\n  0.8243845105171204,\n  0.8185474276542664,\n  0.8126435279846191,\n  0.806674599647522,\n  0.8006424903869629,\n  0.7945488691329956,\n  0.7883956432342529,\n  0.7821846008300781,\n  0.7759175896644592,\n  0.7695963978767395,\n  0.7632229328155518,\n  0.756799042224884,\n  0.7503265738487244,\n  0.7438073754310608,\n  0.7372432947158813,\n  0.7306362986564636,\n  0.7239882349967957,\n  0.7173009514808655,\n  0.7105764150619507,\n  0.7038164138793945,\n  0.6970228552818298,\n  0.6901976466178894,\n  0.683342695236206,\n  0.6764598488807678,\n  0.6695510149002075,\n  0.6626180410385132,\n  0.6556628346443176,\n  0.6486871838569641,\n  0.6416930556297302,\n  0.6346822381019592,\n  0.6276565790176392,\n  0.6206179261207581,\n  0.613568127155304,\n  0.6065089106559753,\n  0.599442183971405,\n  0.5923697352409363,\n  0.5852932929992676,\n  0.5782146453857422,\n  0.5711356401443481,\n  0.5640578269958496,\n  0.5569831132888794,\n  0.5499131679534912,\n  0.542849600315094,\n  0.535794198513031,\n  0.528748631477356,\n  0.521714448928833,\n  0.5146933197975159,\n  0.5076868534088135,\n  0.50069659948349,\n  0.4937242269515991,\n  0.48677122592926025,\n  0.4798390865325928,\n  0.47292935848236084,\n  0.46604350209236145,\n  0.4591829478740692,\n  0.4523491859436035,\n  0.4455436170101166,\n  0.43876758217811584,\n  0.43202248215675354,\n  0.4253096282482147,\n  0.41863036155700684,\n  0.41198593378067017,\n  0.40537765622138977,\n  0.39880669116973877,\n  0.39227429032325745,\n  0.3857816159725189,\n  0.3793298304080963,\n  0.37292003631591797,\n  0.3665533661842346,\n  0.36023083329200745,\n  0.3539535105228424,\n  0.3477224111557007,\n  0.3415384888648987,\n  0.3354027271270752,\n  0.32931602001190186,\n  0.3232792913913727,\n  0.31729334592819214,\n  0.31135910749435425,\n  0.3054772913455963,\n  0.2996487319469452,\n  0.2938741445541382,\n  0.2881542444229126,\n  0.28248974680900574,\n  0.27688124775886536,\n  0.27132943272590637,\n  0.26583486795425415,\n  0.26039811968803406,\n  0.25501975417137146,\n  0.24970023334026337,\n  0.24444004893302917,\n  0.2392396628856659,\n  0.23409949243068695,\n  0.2290199100971222,\n  0.22400128841400146,\n  0.21904397010803223,\n  0.21414823830127716,\n  0.20931439101696014,\n  0.20454265177249908,\n  0.19983325898647308,\n  0.19518640637397766,\n  0.19060224294662476,\n  0.1860809326171875,\n  0.18162256479263306,\n  0.17722724378108978,\n  0.17289499938488007,\n  0.16862590610980988,\n  0.16441994905471802,\n  0.1602771282196045,\n  0.15619738399982452,\n  0.15218067169189453,\n  0.14822690188884735,\n  0.14433594048023224,\n  0.14050769805908203,\n  0.1367419809103012,\n  0.13303862512111664,\n  0.1293974369764328,\n  0.12581820785999298,\n  0.12230068445205688,\n  0.11884460598230362,\n  0.1154496967792511,\n  0.11211567372083664,\n  0.10884220153093338,\n  0.10562896728515625,\n  0.1024756133556366,\n  0.09938176721334457,\n  0.09634705632925034,\n  0.09337107837200165,\n  0.09045342355966568,\n  0.08759366720914841,\n  0.08479136973619461,\n  0.08204606920480728,\n  0.07935731112957001,\n  0.07672461867332458,\n  0.07414749264717102,\n  0.07162544131278992,\n  0.06915795803070068,\n  0.06674451380968094,\n  0.0643845945596695,\n  0.062077656388282776,\n  0.059823162853717804,\n  0.05762055516242981,\n  0.05546928569674492,\n  0.05336878448724747,\n  0.051318492740392685,\n  0.04931783303618431,\n  0.04736623540520668,\n  0.04546311870217323,\n  0.04360789805650711,\n  0.04179999977350235,\n  0.040038831532001495,\n  0.03832381218671799,\n  0.036654356867074966,\n  0.035029876977205276,\n  0.033449795097112656,\n  0.03191352263092995,\n  0.030420485883951187,\n  0.028970103710889816,\n  0.02756180427968502,\n  0.026195017620921135,\n  0.024869179353117943,\n  0.023583726957440376,\n  0.022338109090924263,\n  0.02113177441060543,\n  0.01996418461203575,\n  0.018834801390767097,\n  0.017743101343512535,\n  0.01668856292963028,\n  0.01567067764699459,\n  0.0146889453753829,\n  0.013742873445153236,\n  0.012831982225179672,\n  0.011955800466239452,\n  0.011113868094980717,\n  0.01030573807656765,\n  0.009530973620712757,\n  0.008789150044322014,\n  0.00807985756546259,\n  0.007402697112411261,\n  0.006757283117622137,\n  0.006143244449049234,\n  0.0055602239444851875,\n  0.005007879342883825,\n  0.004485881421715021,\n  0.003993918187916279,\n  0.0035316909197717905,\n  0.0030989176593720913,\n  0.002695332048460841,\n  0.002320683328434825,\n  0.0019747375044971704,\n  0.0016572769964113832,\n  0.0013681006385013461,\n  0.001107024378143251,\n  0.000873881159350276,\n  0.0006685210973955691,\n  0.0004908115370199084,\n  0.00034063743078149855,\n  0.00021790112077724189,\n  0.0001225226151291281,\n  5.44396425539162e-05,\n  1.3607682376459707e-05,\n  -1.3877787807814457e-17\n]\n"
  },
  {
    "path": "__tests__/data/hamming1024.json",
    "content": "[\n  0.07999999821186066,\n  0.08000865578651428,\n  0.08003463596105576,\n  0.08007793128490448,\n  0.08013854175806046,\n  0.08021646738052368,\n  0.08031170070171356,\n  0.0804242417216301,\n  0.08055409044027328,\n  0.08070123195648193,\n  0.08086566627025604,\n  0.08104738593101501,\n  0.08124639093875885,\n  0.08146265894174576,\n  0.08169619739055634,\n  0.08194699138402939,\n  0.08221502602100372,\n  0.08250029385089874,\n  0.08280279487371445,\n  0.08312250673770905,\n  0.08345941454172134,\n  0.08381351083517075,\n  0.08418478816747665,\n  0.08457322418689728,\n  0.08497880399227142,\n  0.0854015201330185,\n  0.0858413502573967,\n  0.08629827201366425,\n  0.08677228540182114,\n  0.08726336061954498,\n  0.087771475315094,\n  0.08829662203788757,\n  0.08883877098560333,\n  0.08939790725708008,\n  0.08997400850057602,\n  0.09056705236434937,\n  0.09117701649665833,\n  0.0918038859963417,\n  0.09244762361049652,\n  0.09310820698738098,\n  0.09378562122583389,\n  0.09447983652353287,\n  0.09519082307815552,\n  0.09591855853796005,\n  0.09666301310062408,\n  0.09742415696382523,\n  0.09820196032524109,\n  0.09899640083312988,\n  0.09980744868516922,\n  0.10063505917787552,\n  0.10147922486066818,\n  0.10233989357948303,\n  0.10321703553199768,\n  0.10411062836647034,\n  0.10502062737941742,\n  0.10594701021909714,\n  0.10688973218202591,\n  0.10784875601530075,\n  0.10882405191659927,\n  0.1098155826330185,\n  0.11082331091165543,\n  0.11184719949960709,\n  0.11288720369338989,\n  0.11394328624010086,\n  0.1150154173374176,\n  0.11610354483127594,\n  0.11720763146877289,\n  0.11832763254642487,\n  0.11946351081132889,\n  0.12061522156000137,\n  0.12178272753953934,\n  0.1229659765958786,\n  0.12416492402553558,\n  0.1253795325756073,\n  0.12660974264144897,\n  0.12785552442073822,\n  0.12911681830883026,\n  0.1303935945034027,\n  0.1316857784986496,\n  0.13299334049224854,\n  0.13431622087955475,\n  0.13565437495708466,\n  0.13700775802135468,\n  0.13837631046772003,\n  0.13975998759269714,\n  0.14115872979164124,\n  0.14257249236106873,\n  0.14400120079517365,\n  0.1454448401927948,\n  0.14690332114696503,\n  0.14837661385536194,\n  0.14986464381217957,\n  0.15136736631393433,\n  0.15288470685482025,\n  0.15441663563251495,\n  0.15596307814121246,\n  0.157523974776268,\n  0.159099280834198,\n  0.16068892180919647,\n  0.16229283809661865,\n  0.16391098499298096,\n  0.16554328799247742,\n  0.16718968749046326,\n  0.1688501238822937,\n  0.17052453756332397,\n  0.1722128540277481,\n  0.17391502857208252,\n  0.17563097178936005,\n  0.1773606389760971,\n  0.17910397052764893,\n  0.18086087703704834,\n  0.18263129889965057,\n  0.18441519141197205,\n  0.1862124651670456,\n  0.18802306056022644,\n  0.18984690308570862,\n  0.19168393313884735,\n  0.19353407621383667,\n  0.1953972578048706,\n  0.19727341830730438,\n  0.19916248321533203,\n  0.20106437802314758,\n  0.20297902822494507,\n  0.2049063742160797,\n  0.20684634149074554,\n  0.2087988406419754,\n  0.2107638269662857,\n  0.2127411961555481,\n  0.2147308737039566,\n  0.21673281490802765,\n  0.21874693036079407,\n  0.2207731306552887,\n  0.22281135618686676,\n  0.2248615175485611,\n  0.22692354023456573,\n  0.2289973497390747,\n  0.23108288645744324,\n  0.23318003118038177,\n  0.23528873920440674,\n  0.23740892112255096,\n  0.2395404875278473,\n  0.24168337881565094,\n  0.24383749067783356,\n  0.24600274860858917,\n  0.248179093003273,\n  0.2503664195537567,\n  0.2525646388530731,\n  0.25477367639541626,\n  0.25699347257614136,\n  0.25922390818595886,\n  0.261464923620224,\n  0.2637164294719696,\n  0.26597830653190613,\n  0.2682505249977112,\n  0.2705329954624176,\n  0.27282556891441345,\n  0.27512824535369873,\n  0.2774408459663391,\n  0.2797633707523346,\n  0.28209567070007324,\n  0.2844376862049103,\n  0.28678932785987854,\n  0.28915050625801086,\n  0.2915211319923401,\n  0.29390108585357666,\n  0.2962903380393982,\n  0.29868873953819275,\n  0.30109623074531555,\n  0.3035127520561218,\n  0.30593812465667725,\n  0.3083723485469818,\n  0.3108152747154236,\n  0.3132668435573578,\n  0.3157269358634949,\n  0.3181954622268677,\n  0.3206723630428314,\n  0.32315748929977417,\n  0.32565081119537354,\n  0.3281521797180176,\n  0.3306615352630615,\n  0.3331787884235382,\n  0.3357038199901581,\n  0.338236540555954,\n  0.34077683091163635,\n  0.3433246612548828,\n  0.3458798825740814,\n  0.348442405462265,\n  0.35101214051246643,\n  0.3535889983177185,\n  0.3561728596687317,\n  0.3587636649608612,\n  0.3613612651824951,\n  0.36396563053131104,\n  0.36657658219337463,\n  0.3691940903663635,\n  0.37181803584098816,\n  0.3744482696056366,\n  0.37708479166030884,\n  0.37972739338874817,\n  0.3823760747909546,\n  0.3850306570529938,\n  0.38769111037254333,\n  0.39035725593566895,\n  0.3930290639400482,\n  0.3957063853740692,\n  0.39838916063308716,\n  0.4010772705078125,\n  0.4037705957889557,\n  0.40646904706954956,\n  0.40917253494262695,\n  0.4118809401988983,\n  0.4145941734313965,\n  0.4173121452331543,\n  0.4200347065925598,\n  0.42276179790496826,\n  0.4254932999610901,\n  0.42822912335395813,\n  0.43096914887428284,\n  0.43371325731277466,\n  0.4364613890647888,\n  0.43921342492103577,\n  0.44196924567222595,\n  0.4447287619113922,\n  0.447491854429245,\n  0.4502584636211395,\n  0.4530284106731415,\n  0.45580166578292847,\n  0.45857805013656616,\n  0.4613575339317322,\n  0.4641399681568146,\n  0.4669252634048462,\n  0.4697133004665375,\n  0.47250398993492126,\n  0.475297212600708,\n  0.47809287905693054,\n  0.4808908700942993,\n  0.48369109630584717,\n  0.48649343848228455,\n  0.4892977774143219,\n  0.49210405349731445,\n  0.49491211771965027,\n  0.4977218806743622,\n  0.5005332231521606,\n  0.5033460855484009,\n  0.506160318851471,\n  0.5089758038520813,\n  0.5117924809455872,\n  0.5146101713180542,\n  0.5174288749694824,\n  0.5202484130859375,\n  0.5230686664581299,\n  0.5258895754814148,\n  0.5287110209465027,\n  0.531532883644104,\n  0.534355103969574,\n  0.5371775031089783,\n  0.5400000214576721,\n  0.5428224802017212,\n  0.5456448793411255,\n  0.5484670996665955,\n  0.5512889623641968,\n  0.5541104078292847,\n  0.5569313168525696,\n  0.559751570224762,\n  0.562571108341217,\n  0.5653898119926453,\n  0.5682075619697571,\n  0.5710241794586182,\n  0.5738397240638733,\n  0.5766538977622986,\n  0.5794667601585388,\n  0.5822781324386597,\n  0.5850878953933716,\n  0.587895929813385,\n  0.5907022356987,\n  0.5935065746307373,\n  0.5963088870048523,\n  0.5991091132164001,\n  0.6019071340560913,\n  0.6047027707099915,\n  0.6074960231781006,\n  0.6102867126464844,\n  0.6130747199058533,\n  0.6158600449562073,\n  0.6186424493789673,\n  0.6214219331741333,\n  0.6241983771324158,\n  0.6269716024398804,\n  0.6297415494918823,\n  0.6325081586837769,\n  0.6352712512016296,\n  0.6380307674407959,\n  0.6407865881919861,\n  0.6435385942459106,\n  0.6462867259979248,\n  0.649030864238739,\n  0.6517708897590637,\n  0.6545066833496094,\n  0.6572381854057312,\n  0.6599652767181396,\n  0.6626878976821899,\n  0.665405809879303,\n  0.6681190729141235,\n  0.6708274483680725,\n  0.6735309362411499,\n  0.6762294173240662,\n  0.678922712802887,\n  0.6816108226776123,\n  0.6842936277389526,\n  0.6869709491729736,\n  0.6896427273750305,\n  0.6923089027404785,\n  0.6949693560600281,\n  0.6976239085197449,\n  0.7002726197242737,\n  0.7029152512550354,\n  0.7055517435073853,\n  0.7081819772720337,\n  0.7108058929443359,\n  0.7134234309196472,\n  0.7160343527793884,\n  0.7186387181282043,\n  0.7212363481521606,\n  0.7238271236419678,\n  0.726410984992981,\n  0.7289878726005554,\n  0.7315576076507568,\n  0.7341201305389404,\n  0.7366753220558167,\n  0.7392231822013855,\n  0.7417634725570679,\n  0.7442961931228638,\n  0.7468212246894836,\n  0.7493384480476379,\n  0.7518478035926819,\n  0.7543491721153259,\n  0.7568424940109253,\n  0.7593276500701904,\n  0.7618045210838318,\n  0.7642730474472046,\n  0.7667331695556641,\n  0.7691847085952759,\n  0.77162766456604,\n  0.7740618586540222,\n  0.7764872908592224,\n  0.7789037823677063,\n  0.7813112735748291,\n  0.7837096452713013,\n  0.7860988974571228,\n  0.7884788513183594,\n  0.790849506855011,\n  0.7932106852531433,\n  0.7955623269081116,\n  0.7979043126106262,\n  0.8002366423606873,\n  0.8025591373443604,\n  0.8048717975616455,\n  0.8071744441986084,\n  0.8094670176506042,\n  0.8117494583129883,\n  0.8140217065811157,\n  0.8162835836410522,\n  0.8185350894927979,\n  0.820776104927063,\n  0.8230065107345581,\n  0.8252263069152832,\n  0.8274353742599487,\n  0.8296335935592651,\n  0.8318209052085876,\n  0.8339972496032715,\n  0.8361625075340271,\n  0.8383166193962097,\n  0.8404595255851746,\n  0.8425911068916321,\n  0.8447112441062927,\n  0.8468199372291565,\n  0.8489171266555786,\n  0.8510026335716248,\n  0.8530764579772949,\n  0.8551384806632996,\n  0.8571886420249939,\n  0.8592268824577332,\n  0.8612530827522278,\n  0.863267183303833,\n  0.865269124507904,\n  0.8672587871551514,\n  0.869236171245575,\n  0.8712011575698853,\n  0.8731536865234375,\n  0.8750936388969421,\n  0.8770209550857544,\n  0.8789356350898743,\n  0.8808375000953674,\n  0.8827266097068787,\n  0.8846027255058289,\n  0.8864659070968628,\n  0.8883160948753357,\n  0.8901531100273132,\n  0.8919769525527954,\n  0.8937875628471375,\n  0.8955848217010498,\n  0.8973686695098877,\n  0.8991391062736511,\n  0.9008960127830505,\n  0.9026393294334412,\n  0.9043689966201782,\n  0.9060849547386169,\n  0.9077871441841125,\n  0.9094754457473755,\n  0.9111498594284058,\n  0.9128103256225586,\n  0.9144567251205444,\n  0.9160889983177185,\n  0.9177071452140808,\n  0.9193111062049866,\n  0.9209007024765015,\n  0.9224759936332703,\n  0.9240369200706482,\n  0.9255833625793457,\n  0.927115261554718,\n  0.9286326169967651,\n  0.9301353693008423,\n  0.9316233992576599,\n  0.9330966472625732,\n  0.934555172920227,\n  0.935998797416687,\n  0.9374275207519531,\n  0.9388412833213806,\n  0.9402400255203247,\n  0.9416236877441406,\n  0.9429922699928284,\n  0.9443456530570984,\n  0.9456837773323059,\n  0.9470066428184509,\n  0.9483142495155334,\n  0.9496064186096191,\n  0.950883150100708,\n  0.9521445035934448,\n  0.9533902406692505,\n  0.9546204805374146,\n  0.9558351039886475,\n  0.9570340514183044,\n  0.9582172632217407,\n  0.9593847990036011,\n  0.9605364799499512,\n  0.9616723656654358,\n  0.9627923965454102,\n  0.9638964533805847,\n  0.9649845957756042,\n  0.9660567045211792,\n  0.9671127796173096,\n  0.9681528210639954,\n  0.969176709651947,\n  0.9701843857765198,\n  0.9711759686470032,\n  0.9721512198448181,\n  0.9731102585792542,\n  0.9740529656410217,\n  0.9749793410301208,\n  0.9758893847465515,\n  0.9767829775810242,\n  0.9776601195335388,\n  0.9785207509994507,\n  0.9793649315834045,\n  0.9801925420761108,\n  0.9810035824775696,\n  0.9817980527877808,\n  0.9825758337974548,\n  0.9833369851112366,\n  0.9840814471244812,\n  0.984809160232544,\n  0.9855201840400696,\n  0.9862143993377686,\n  0.9868918061256409,\n  0.9875524044036865,\n  0.9881961345672607,\n  0.9888229966163635,\n  0.9894329309463501,\n  0.9900259971618652,\n  0.9906020760536194,\n  0.9911612272262573,\n  0.9917033910751343,\n  0.9922285079956055,\n  0.9927366375923157,\n  0.9932277202606201,\n  0.993701696395874,\n  0.9941586256027222,\n  0.9945985078811646,\n  0.9950212240219116,\n  0.9954267740249634,\n  0.9958152174949646,\n  0.9961864948272705,\n  0.9965406060218811,\n  0.9968774914741516,\n  0.9971972107887268,\n  0.9974997043609619,\n  0.9977849721908569,\n  0.9980530142784119,\n  0.9983038306236267,\n  0.9985373616218567,\n  0.9987536072731018,\n  0.9989526271820068,\n  0.9991343021392822,\n  0.9992987513542175,\n  0.999445915222168,\n  0.9995757341384888,\n  0.9996882677078247,\n  0.9997835159301758,\n  0.999861478805542,\n  0.9999220967292786,\n  0.9999653697013855,\n  0.9999913573265076,\n  1,\n  0.9999913573265076,\n  0.9999653697013855,\n  0.9999220967292786,\n  0.999861478805542,\n  0.9997835159301758,\n  0.9996882677078247,\n  0.9995757341384888,\n  0.999445915222168,\n  0.9992987513542175,\n  0.9991343021392822,\n  0.9989526271820068,\n  0.9987536072731018,\n  0.9985373616218567,\n  0.9983038306236267,\n  0.9980530142784119,\n  0.9977849721908569,\n  0.9974997043609619,\n  0.9971972107887268,\n  0.9968774914741516,\n  0.9965406060218811,\n  0.9961864948272705,\n  0.9958152174949646,\n  0.9954267740249634,\n  0.9950212240219116,\n  0.9945985078811646,\n  0.9941586256027222,\n  0.993701696395874,\n  0.9932277202606201,\n  0.9927366375923157,\n  0.9922285079956055,\n  0.9917033910751343,\n  0.9911612272262573,\n  0.9906020760536194,\n  0.9900259971618652,\n  0.9894329309463501,\n  0.9888229966163635,\n  0.9881961345672607,\n  0.9875524044036865,\n  0.9868918061256409,\n  0.9862143993377686,\n  0.9855201840400696,\n  0.984809160232544,\n  0.9840814471244812,\n  0.9833369851112366,\n  0.9825758337974548,\n  0.9817980527877808,\n  0.9810035824775696,\n  0.9801925420761108,\n  0.9793649315834045,\n  0.9785207509994507,\n  0.9776601195335388,\n  0.9767829775810242,\n  0.9758893847465515,\n  0.9749793410301208,\n  0.9740529656410217,\n  0.9731102585792542,\n  0.9721512198448181,\n  0.9711759686470032,\n  0.9701843857765198,\n  0.969176709651947,\n  0.9681528210639954,\n  0.9671127796173096,\n  0.9660567045211792,\n  0.9649845957756042,\n  0.9638964533805847,\n  0.9627923965454102,\n  0.9616723656654358,\n  0.9605364799499512,\n  0.9593847990036011,\n  0.9582172632217407,\n  0.9570340514183044,\n  0.9558351039886475,\n  0.9546204805374146,\n  0.9533902406692505,\n  0.9521445035934448,\n  0.950883150100708,\n  0.9496064186096191,\n  0.9483142495155334,\n  0.9470066428184509,\n  0.9456837773323059,\n  0.9443456530570984,\n  0.9429922699928284,\n  0.9416236877441406,\n  0.9402400255203247,\n  0.9388412833213806,\n  0.9374275207519531,\n  0.935998797416687,\n  0.934555172920227,\n  0.9330966472625732,\n  0.9316233992576599,\n  0.9301353693008423,\n  0.9286326169967651,\n  0.927115261554718,\n  0.9255833625793457,\n  0.9240369200706482,\n  0.9224759936332703,\n  0.9209007024765015,\n  0.9193111062049866,\n  0.9177071452140808,\n  0.9160889983177185,\n  0.9144567251205444,\n  0.9128103256225586,\n  0.9111498594284058,\n  0.9094754457473755,\n  0.9077871441841125,\n  0.9060849547386169,\n  0.9043689966201782,\n  0.9026393294334412,\n  0.9008960127830505,\n  0.8991391062736511,\n  0.8973686695098877,\n  0.8955848217010498,\n  0.8937875628471375,\n  0.8919769525527954,\n  0.8901531100273132,\n  0.8883160948753357,\n  0.8864659070968628,\n  0.8846027255058289,\n  0.8827266097068787,\n  0.8808375000953674,\n  0.8789356350898743,\n  0.8770209550857544,\n  0.8750936388969421,\n  0.8731536865234375,\n  0.8712011575698853,\n  0.869236171245575,\n  0.8672587871551514,\n  0.865269124507904,\n  0.863267183303833,\n  0.8612530827522278,\n  0.8592268824577332,\n  0.8571886420249939,\n  0.8551384806632996,\n  0.8530764579772949,\n  0.8510026335716248,\n  0.8489171266555786,\n  0.8468199372291565,\n  0.8447112441062927,\n  0.8425911068916321,\n  0.8404595255851746,\n  0.8383166193962097,\n  0.8361625075340271,\n  0.8339972496032715,\n  0.8318209052085876,\n  0.8296335935592651,\n  0.8274353742599487,\n  0.8252263069152832,\n  0.8230065107345581,\n  0.820776104927063,\n  0.8185350894927979,\n  0.8162835836410522,\n  0.8140217065811157,\n  0.8117494583129883,\n  0.8094670176506042,\n  0.8071744441986084,\n  0.8048717975616455,\n  0.8025591373443604,\n  0.8002366423606873,\n  0.7979043126106262,\n  0.7955623269081116,\n  0.7932106852531433,\n  0.790849506855011,\n  0.7884788513183594,\n  0.7860988974571228,\n  0.7837096452713013,\n  0.7813112735748291,\n  0.7789037823677063,\n  0.7764872908592224,\n  0.7740618586540222,\n  0.77162766456604,\n  0.7691847085952759,\n  0.7667331695556641,\n  0.7642730474472046,\n  0.7618045210838318,\n  0.7593276500701904,\n  0.7568424940109253,\n  0.7543491721153259,\n  0.7518478035926819,\n  0.7493384480476379,\n  0.7468212246894836,\n  0.7442961931228638,\n  0.7417634725570679,\n  0.7392231822013855,\n  0.7366753220558167,\n  0.7341201305389404,\n  0.7315576076507568,\n  0.7289878726005554,\n  0.726410984992981,\n  0.7238271236419678,\n  0.7212363481521606,\n  0.7186387181282043,\n  0.7160343527793884,\n  0.7134234309196472,\n  0.7108058929443359,\n  0.7081819772720337,\n  0.7055517435073853,\n  0.7029152512550354,\n  0.7002726197242737,\n  0.6976239085197449,\n  0.6949693560600281,\n  0.6923089027404785,\n  0.6896427273750305,\n  0.6869709491729736,\n  0.6842936277389526,\n  0.6816108226776123,\n  0.678922712802887,\n  0.6762294173240662,\n  0.6735309362411499,\n  0.6708274483680725,\n  0.6681190729141235,\n  0.665405809879303,\n  0.6626878976821899,\n  0.6599652767181396,\n  0.6572381854057312,\n  0.6545066833496094,\n  0.6517708897590637,\n  0.649030864238739,\n  0.6462867259979248,\n  0.6435385942459106,\n  0.6407865881919861,\n  0.6380307674407959,\n  0.6352712512016296,\n  0.6325081586837769,\n  0.6297415494918823,\n  0.6269716024398804,\n  0.6241983771324158,\n  0.6214219331741333,\n  0.6186424493789673,\n  0.6158600449562073,\n  0.6130747199058533,\n  0.6102867126464844,\n  0.6074960231781006,\n  0.6047027707099915,\n  0.6019071340560913,\n  0.5991091132164001,\n  0.5963088870048523,\n  0.5935065746307373,\n  0.5907022356987,\n  0.587895929813385,\n  0.5850878953933716,\n  0.5822781324386597,\n  0.5794667601585388,\n  0.5766538977622986,\n  0.5738397240638733,\n  0.5710241794586182,\n  0.5682075619697571,\n  0.5653898119926453,\n  0.562571108341217,\n  0.559751570224762,\n  0.5569313168525696,\n  0.5541104078292847,\n  0.5512889623641968,\n  0.5484670996665955,\n  0.5456448793411255,\n  0.5428224802017212,\n  0.5400000214576721,\n  0.5371775031089783,\n  0.534355103969574,\n  0.531532883644104,\n  0.5287110209465027,\n  0.5258895754814148,\n  0.5230686664581299,\n  0.5202484130859375,\n  0.5174288749694824,\n  0.5146101713180542,\n  0.5117924809455872,\n  0.5089758038520813,\n  0.506160318851471,\n  0.5033460855484009,\n  0.5005332231521606,\n  0.4977218806743622,\n  0.49491211771965027,\n  0.49210405349731445,\n  0.4892977774143219,\n  0.48649343848228455,\n  0.48369109630584717,\n  0.4808908700942993,\n  0.47809287905693054,\n  0.475297212600708,\n  0.47250398993492126,\n  0.4697133004665375,\n  0.4669252634048462,\n  0.4641399681568146,\n  0.4613575339317322,\n  0.45857805013656616,\n  0.45580166578292847,\n  0.4530284106731415,\n  0.4502584636211395,\n  0.447491854429245,\n  0.4447287619113922,\n  0.44196924567222595,\n  0.43921342492103577,\n  0.4364613890647888,\n  0.43371325731277466,\n  0.43096914887428284,\n  0.42822912335395813,\n  0.4254932999610901,\n  0.42276179790496826,\n  0.4200347065925598,\n  0.4173121452331543,\n  0.4145941734313965,\n  0.4118809401988983,\n  0.40917253494262695,\n  0.40646904706954956,\n  0.4037705957889557,\n  0.4010772705078125,\n  0.39838916063308716,\n  0.3957063853740692,\n  0.3930290639400482,\n  0.39035725593566895,\n  0.38769111037254333,\n  0.3850306570529938,\n  0.3823760747909546,\n  0.37972739338874817,\n  0.37708479166030884,\n  0.3744482696056366,\n  0.37181803584098816,\n  0.3691940903663635,\n  0.36657658219337463,\n  0.36396563053131104,\n  0.3613612651824951,\n  0.3587636649608612,\n  0.3561728596687317,\n  0.3535889983177185,\n  0.35101214051246643,\n  0.348442405462265,\n  0.3458798825740814,\n  0.3433246612548828,\n  0.34077683091163635,\n  0.338236540555954,\n  0.3357038199901581,\n  0.3331787884235382,\n  0.3306615352630615,\n  0.3281521797180176,\n  0.32565081119537354,\n  0.32315748929977417,\n  0.3206723630428314,\n  0.3181954622268677,\n  0.3157269358634949,\n  0.3132668435573578,\n  0.3108152747154236,\n  0.3083723485469818,\n  0.30593812465667725,\n  0.3035127520561218,\n  0.30109623074531555,\n  0.29868873953819275,\n  0.2962903380393982,\n  0.29390108585357666,\n  0.2915211319923401,\n  0.28915050625801086,\n  0.28678932785987854,\n  0.2844376862049103,\n  0.28209567070007324,\n  0.2797633707523346,\n  0.2774408459663391,\n  0.27512824535369873,\n  0.27282556891441345,\n  0.2705329954624176,\n  0.2682505249977112,\n  0.26597830653190613,\n  0.2637164294719696,\n  0.261464923620224,\n  0.25922390818595886,\n  0.25699347257614136,\n  0.25477367639541626,\n  0.2525646388530731,\n  0.2503664195537567,\n  0.248179093003273,\n  0.24600274860858917,\n  0.24383749067783356,\n  0.24168337881565094,\n  0.2395404875278473,\n  0.23740892112255096,\n  0.23528873920440674,\n  0.23318003118038177,\n  0.23108288645744324,\n  0.2289973497390747,\n  0.22692354023456573,\n  0.2248615175485611,\n  0.22281135618686676,\n  0.2207731306552887,\n  0.21874693036079407,\n  0.21673281490802765,\n  0.2147308737039566,\n  0.2127411961555481,\n  0.2107638269662857,\n  0.2087988406419754,\n  0.20684634149074554,\n  0.2049063742160797,\n  0.20297902822494507,\n  0.20106437802314758,\n  0.19916248321533203,\n  0.19727341830730438,\n  0.1953972578048706,\n  0.19353407621383667,\n  0.19168393313884735,\n  0.18984690308570862,\n  0.18802306056022644,\n  0.1862124651670456,\n  0.18441519141197205,\n  0.18263129889965057,\n  0.18086087703704834,\n  0.17910397052764893,\n  0.1773606389760971,\n  0.17563097178936005,\n  0.17391502857208252,\n  0.1722128540277481,\n  0.17052453756332397,\n  0.1688501238822937,\n  0.16718968749046326,\n  0.16554328799247742,\n  0.16391098499298096,\n  0.16229283809661865,\n  0.16068892180919647,\n  0.159099280834198,\n  0.157523974776268,\n  0.15596307814121246,\n  0.15441663563251495,\n  0.15288470685482025,\n  0.15136736631393433,\n  0.14986464381217957,\n  0.14837661385536194,\n  0.14690332114696503,\n  0.1454448401927948,\n  0.14400120079517365,\n  0.14257249236106873,\n  0.14115872979164124,\n  0.13975998759269714,\n  0.13837631046772003,\n  0.13700775802135468,\n  0.13565437495708466,\n  0.13431622087955475,\n  0.13299334049224854,\n  0.1316857784986496,\n  0.1303935945034027,\n  0.12911681830883026,\n  0.12785552442073822,\n  0.12660974264144897,\n  0.1253795325756073,\n  0.12416492402553558,\n  0.1229659765958786,\n  0.12178272753953934,\n  0.12061522156000137,\n  0.11946351081132889,\n  0.11832763254642487,\n  0.11720763146877289,\n  0.11610354483127594,\n  0.1150154173374176,\n  0.11394328624010086,\n  0.11288720369338989,\n  0.11184719949960709,\n  0.11082331091165543,\n  0.1098155826330185,\n  0.10882405191659927,\n  0.10784875601530075,\n  0.10688973218202591,\n  0.10594701021909714,\n  0.10502062737941742,\n  0.10411062836647034,\n  0.10321703553199768,\n  0.10233989357948303,\n  0.10147922486066818,\n  0.10063505917787552,\n  0.09980744868516922,\n  0.09899640083312988,\n  0.09820196032524109,\n  0.09742415696382523,\n  0.09666301310062408,\n  0.09591855853796005,\n  0.09519082307815552,\n  0.09447983652353287,\n  0.09378562122583389,\n  0.09310820698738098,\n  0.09244762361049652,\n  0.0918038859963417,\n  0.09117701649665833,\n  0.09056705236434937,\n  0.08997400850057602,\n  0.08939790725708008,\n  0.08883877098560333,\n  0.08829662203788757,\n  0.087771475315094,\n  0.08726336061954498,\n  0.08677228540182114,\n  0.08629827201366425,\n  0.0858413502573967,\n  0.0854015201330185,\n  0.08497880399227142,\n  0.08457322418689728,\n  0.08418478816747665,\n  0.08381351083517075,\n  0.08345941454172134,\n  0.08312250673770905,\n  0.08280279487371445,\n  0.08250029385089874,\n  0.08221502602100372,\n  0.08194699138402939,\n  0.08169619739055634,\n  0.08146265894174576,\n  0.08124639093875885,\n  0.08104738593101501,\n  0.08086566627025604,\n  0.08070123195648193,\n  0.08055409044027328,\n  0.0804242417216301,\n  0.08031170070171356,\n  0.08021646738052368,\n  0.08013854175806046,\n  0.08007793128490448,\n  0.08003463596105576,\n  0.08000865578651428\n]\n"
  },
  {
    "path": "__tests__/data/hamming128.json",
    "content": "[\n  0.07999999821186066,\n  0.08055409044027328,\n  0.08221502602100372,\n  0.08497880399227142,\n  0.08883877098560333,\n  0.09378562122583389,\n  0.09980744868516922,\n  0.10688973218202591,\n  0.1150154173374176,\n  0.12416492402553558,\n  0.13431622087955475,\n  0.1454448401927948,\n  0.157523974776268,\n  0.17052453756332397,\n  0.18441519141197205,\n  0.19916248321533203,\n  0.2147308737039566,\n  0.23108288645744324,\n  0.248179093003273,\n  0.26597830653190613,\n  0.2844376862049103,\n  0.3035127520561218,\n  0.32315748929977417,\n  0.3433246612548828,\n  0.36396563053131104,\n  0.3850306570529938,\n  0.40646904706954956,\n  0.42822912335395813,\n  0.4502584636211395,\n  0.47250398993492126,\n  0.49491211771965027,\n  0.5174288749694824,\n  0.5400000214576721,\n  0.562571108341217,\n  0.5850878953933716,\n  0.6074960231781006,\n  0.6297415494918823,\n  0.6517708897590637,\n  0.6735309362411499,\n  0.6949693560600281,\n  0.7160343527793884,\n  0.7366753220558167,\n  0.7568424940109253,\n  0.7764872908592224,\n  0.7955623269081116,\n  0.8140217065811157,\n  0.8318209052085876,\n  0.8489171266555786,\n  0.865269124507904,\n  0.8808375000953674,\n  0.8955848217010498,\n  0.9094754457473755,\n  0.9224759936332703,\n  0.934555172920227,\n  0.9456837773323059,\n  0.9558351039886475,\n  0.9649845957756042,\n  0.9731102585792542,\n  0.9801925420761108,\n  0.9862143993377686,\n  0.9911612272262573,\n  0.9950212240219116,\n  0.9977849721908569,\n  0.999445915222168,\n  1,\n  0.999445915222168,\n  0.9977849721908569,\n  0.9950212240219116,\n  0.9911612272262573,\n  0.9862143993377686,\n  0.9801925420761108,\n  0.9731102585792542,\n  0.9649845957756042,\n  0.9558351039886475,\n  0.9456837773323059,\n  0.934555172920227,\n  0.9224759936332703,\n  0.9094754457473755,\n  0.8955848217010498,\n  0.8808375000953674,\n  0.865269124507904,\n  0.8489171266555786,\n  0.8318209052085876,\n  0.8140217065811157,\n  0.7955623269081116,\n  0.7764872908592224,\n  0.7568424940109253,\n  0.7366753220558167,\n  0.7160343527793884,\n  0.6949693560600281,\n  0.6735309362411499,\n  0.6517708897590637,\n  0.6297415494918823,\n  0.6074960231781006,\n  0.5850878953933716,\n  0.562571108341217,\n  0.5400000214576721,\n  0.5174288749694824,\n  0.49491211771965027,\n  0.47250398993492126,\n  0.4502584636211395,\n  0.42822912335395813,\n  0.40646904706954956,\n  0.3850306570529938,\n  0.36396563053131104,\n  0.3433246612548828,\n  0.32315748929977417,\n  0.3035127520561218,\n  0.2844376862049103,\n  0.26597830653190613,\n  0.248179093003273,\n  0.23108288645744324,\n  0.2147308737039566,\n  0.19916248321533203,\n  0.18441519141197205,\n  0.17052453756332397,\n  0.157523974776268,\n  0.1454448401927948,\n  0.13431622087955475,\n  0.12416492402553558,\n  0.1150154173374176,\n  0.10688973218202591,\n  0.09980744868516922,\n  0.09378562122583389,\n  0.08883877098560333,\n  0.08497880399227142,\n  0.08221502602100372,\n  0.08055409044027328\n]\n"
  },
  {
    "path": "__tests__/data/hamming2048.json",
    "content": "[\n  0.07999999821186066,\n  0.08000216633081436,\n  0.08000865578651428,\n  0.08001948148012161,\n  0.08003463596105576,\n  0.08005411922931671,\n  0.08007793128490448,\n  0.08010607212781906,\n  0.08013854175806046,\n  0.08017534017562866,\n  0.08021646738052368,\n  0.08026192337274551,\n  0.08031170070171356,\n  0.08036581426858902,\n  0.0804242417216301,\n  0.08048700541257858,\n  0.08055409044027328,\n  0.0806254968047142,\n  0.08070123195648193,\n  0.08078128844499588,\n  0.08086566627025604,\n  0.08095436543226242,\n  0.08104738593101501,\n  0.08114472776651382,\n  0.08124639093875885,\n  0.0813523679971695,\n  0.08146265894174576,\n  0.08157727122306824,\n  0.08169619739055634,\n  0.08181943744421005,\n  0.08194699138402939,\n  0.08207885175943375,\n  0.08221502602100372,\n  0.08235550671815872,\n  0.08250029385089874,\n  0.08264939486980438,\n  0.08280279487371445,\n  0.08296050131320953,\n  0.08312250673770905,\n  0.08328881114721298,\n  0.08345941454172134,\n  0.08363431692123413,\n  0.08381351083517075,\n  0.08399700373411179,\n  0.08418478816747665,\n  0.08437686413526535,\n  0.08457322418689728,\n  0.08477386832237244,\n  0.08497880399227142,\n  0.08518802374601364,\n  0.0854015201330185,\n  0.08561929315328598,\n  0.0858413502573967,\n  0.08606767654418945,\n  0.08629827201366425,\n  0.08653314411640167,\n  0.08677228540182114,\n  0.08701568841934204,\n  0.08726336061954498,\n  0.08751528710126877,\n  0.087771475315094,\n  0.08803191781044006,\n  0.08829662203788757,\n  0.08856557309627533,\n  0.08883877098560333,\n  0.08911621570587158,\n  0.08939790725708008,\n  0.08968383818864822,\n  0.08997400850057602,\n  0.09026841819286346,\n  0.09056705236434937,\n  0.09086992591619492,\n  0.09117701649665833,\n  0.09148833900690079,\n  0.0918038859963417,\n  0.09212364256381989,\n  0.09244762361049652,\n  0.09277581423521042,\n  0.09310820698738098,\n  0.0934448167681694,\n  0.09378562122583389,\n  0.09413063526153564,\n  0.09447983652353287,\n  0.09483323246240616,\n  0.09519082307815552,\n  0.09555260092020035,\n  0.09591855853796005,\n  0.09628869593143463,\n  0.09666301310062408,\n  0.09704149514436722,\n  0.09742415696382523,\n  0.09781097620725632,\n  0.09820196032524109,\n  0.09859710186719894,\n  0.09899640083312988,\n  0.09939984977245331,\n  0.09980744868516922,\n  0.10021918267011642,\n  0.10063505917787552,\n  0.1010550782084465,\n  0.10147922486066818,\n  0.10190749168395996,\n  0.10233989357948303,\n  0.1027764081954956,\n  0.10321703553199768,\n  0.10366177558898926,\n  0.10411062836647034,\n  0.10456357896327972,\n  0.10502062737941742,\n  0.10548177361488342,\n  0.10594701021909714,\n  0.10641632974147797,\n  0.10688973218202591,\n  0.10736721009016037,\n  0.10784875601530075,\n  0.10833437740802765,\n  0.10882405191659927,\n  0.10931779444217682,\n  0.1098155826330185,\n  0.1103174239397049,\n  0.11082331091165543,\n  0.11133323609828949,\n  0.11184719949960709,\n  0.11236518621444702,\n  0.11288720369338989,\n  0.1134132370352745,\n  0.11394328624010086,\n  0.11447735130786896,\n  0.1150154173374176,\n  0.1155574843287468,\n  0.11610354483127594,\n  0.11665359139442444,\n  0.11720763146877289,\n  0.1177656427025795,\n  0.11832763254642487,\n  0.1188935935497284,\n  0.11946351081132889,\n  0.12003739178180695,\n  0.12061522156000137,\n  0.12119700759649277,\n  0.12178272753953934,\n  0.12237238883972168,\n  0.1229659765958786,\n  0.1235634908080101,\n  0.12416492402553558,\n  0.12477027624845505,\n  0.1253795325756073,\n  0.12599268555641174,\n  0.12660974264144897,\n  0.1272306889295578,\n  0.12785552442073822,\n  0.12848423421382904,\n  0.12911681830883026,\n  0.12975327670574188,\n  0.1303935945034027,\n  0.13103775680065155,\n  0.1316857784986496,\n  0.13233762979507446,\n  0.13299334049224854,\n  0.13365286588668823,\n  0.13431622087955475,\n  0.1349833905696869,\n  0.13565437495708466,\n  0.13632915914058685,\n  0.13700775802135468,\n  0.13769014179706573,\n  0.13837631046772003,\n  0.13906626403331757,\n  0.13975998759269714,\n  0.14045748114585876,\n  0.14115872979164124,\n  0.14186373353004456,\n  0.14257249236106873,\n  0.14328497648239136,\n  0.14400120079517365,\n  0.1447211652994156,\n  0.1454448401927948,\n  0.14617222547531128,\n  0.14690332114696503,\n  0.14763812720775604,\n  0.14837661385536194,\n  0.14911878108978271,\n  0.14986464381217957,\n  0.1506141722202301,\n  0.15136736631393433,\n  0.15212421119213104,\n  0.15288470685482025,\n  0.15364885330200195,\n  0.15441663563251495,\n  0.15518803894519806,\n  0.15596307814121246,\n  0.15674172341823578,\n  0.157523974776268,\n  0.15830983221530914,\n  0.159099280834198,\n  0.15989230573177338,\n  0.16068892180919647,\n  0.1614890992641449,\n  0.16229283809661865,\n  0.16310013830661774,\n  0.16391098499298096,\n  0.1647253781557083,\n  0.16554328799247742,\n  0.16636472940444946,\n  0.16718968749046326,\n  0.1680181622505188,\n  0.1688501238822937,\n  0.16968558728694916,\n  0.17052453756332397,\n  0.17136695981025696,\n  0.1722128540277481,\n  0.17306222021579742,\n  0.17391502857208252,\n  0.1747712790966034,\n  0.17563097178936005,\n  0.17649409174919128,\n  0.1773606389760971,\n  0.17823059856891632,\n  0.17910397052764893,\n  0.17998072504997253,\n  0.18086087703704834,\n  0.18174441158771515,\n  0.18263129889965057,\n  0.183521568775177,\n  0.18441519141197205,\n  0.1853121519088745,\n  0.1862124651670456,\n  0.1871161013841629,\n  0.18802306056022644,\n  0.188933327794075,\n  0.18984690308570862,\n  0.19076377153396606,\n  0.19168393313884735,\n  0.19260737299919128,\n  0.19353407621383667,\n  0.1944640427827835,\n  0.1953972578048706,\n  0.19633372128009796,\n  0.19727341830730438,\n  0.19821634888648987,\n  0.19916248321533203,\n  0.20011183619499207,\n  0.20106437802314758,\n  0.20202010869979858,\n  0.20297902822494507,\n  0.20394112169742584,\n  0.2049063742160797,\n  0.20587478578090668,\n  0.20684634149074554,\n  0.20782102644443512,\n  0.2087988406419754,\n  0.2097797840833664,\n  0.2107638269662857,\n  0.21175095438957214,\n  0.2127411961555481,\n  0.2137344926595688,\n  0.2147308737039566,\n  0.21573032438755035,\n  0.21673281490802765,\n  0.21773836016654968,\n  0.21874693036079407,\n  0.2197585254907608,\n  0.2207731306552887,\n  0.22179074585437775,\n  0.22281135618686676,\n  0.22383494675159454,\n  0.2248615175485611,\n  0.22589105367660522,\n  0.22692354023456573,\n  0.22795897722244263,\n  0.2289973497390747,\n  0.23003865778446198,\n  0.23108288645744324,\n  0.2321300059556961,\n  0.23318003118038177,\n  0.23423294723033905,\n  0.23528873920440674,\n  0.23634740710258484,\n  0.23740892112255096,\n  0.23847328126430511,\n  0.2395404875278473,\n  0.2406105250120163,\n  0.24168337881565094,\n  0.24275903403759003,\n  0.24383749067783356,\n  0.24491873383522034,\n  0.24600274860858917,\n  0.24708954989910126,\n  0.248179093003273,\n  0.24927137792110443,\n  0.2503664195537567,\n  0.2514641582965851,\n  0.2525646388530731,\n  0.25366780161857605,\n  0.25477367639541626,\n  0.25588223338127136,\n  0.25699347257614136,\n  0.25810736417770386,\n  0.25922390818595886,\n  0.26034310460090637,\n  0.261464923620224,\n  0.26258936524391174,\n  0.2637164294719696,\n  0.2648460865020752,\n  0.26597830653190613,\n  0.2671131491661072,\n  0.2682505249977112,\n  0.2693904936313629,\n  0.2705329954624176,\n  0.27167803049087524,\n  0.27282556891441345,\n  0.2739756405353546,\n  0.27512824535369873,\n  0.27628329396247864,\n  0.2774408459663391,\n  0.27860087156295776,\n  0.2797633707523346,\n  0.2809283137321472,\n  0.28209567070007324,\n  0.28326547145843506,\n  0.2844376862049103,\n  0.2856123149394989,\n  0.28678932785987854,\n  0.2879687249660492,\n  0.28915050625801086,\n  0.29033464193344116,\n  0.2915211319923401,\n  0.29270994663238525,\n  0.29390108585357666,\n  0.2950945496559143,\n  0.2962903380393982,\n  0.29748839139938354,\n  0.29868873953819275,\n  0.2998913526535034,\n  0.30109623074531555,\n  0.30230337381362915,\n  0.3035127520561218,\n  0.3047243356704712,\n  0.30593812465667725,\n  0.3071541488170624,\n  0.3083723485469818,\n  0.30959272384643555,\n  0.3108152747154236,\n  0.31203997135162354,\n  0.3132668435573578,\n  0.31449583172798157,\n  0.3157269358634949,\n  0.3169601559638977,\n  0.3181954622268677,\n  0.3194328844547272,\n  0.3206723630428314,\n  0.3219138979911804,\n  0.32315748929977417,\n  0.32440313696861267,\n  0.32565081119537354,\n  0.32690051198005676,\n  0.3281521797180176,\n  0.32940587401390076,\n  0.3306615352630615,\n  0.33191919326782227,\n  0.3331787884235382,\n  0.33444032073020935,\n  0.3357038199901581,\n  0.3369692265987396,\n  0.338236540555954,\n  0.33950573205947876,\n  0.34077683091163635,\n  0.34204980731010437,\n  0.3433246612548828,\n  0.3446013331413269,\n  0.3458798825740814,\n  0.3471602201461792,\n  0.348442405462265,\n  0.3497263789176941,\n  0.35101214051246643,\n  0.35229969024658203,\n  0.3535889983177185,\n  0.35488006472587585,\n  0.3561728596687317,\n  0.3574674129486084,\n  0.3587636649608612,\n  0.3600616157054901,\n  0.3613612651824951,\n  0.3626626133918762,\n  0.36396563053131104,\n  0.3652702867984772,\n  0.36657658219337463,\n  0.3678845167160034,\n  0.3691940903663635,\n  0.3705052435398102,\n  0.37181803584098816,\n  0.3731323778629303,\n  0.3744482696056366,\n  0.37576577067375183,\n  0.37708479166030884,\n  0.3784053325653076,\n  0.37972739338874817,\n  0.3810510039329529,\n  0.3823760747909546,\n  0.3837026357650757,\n  0.3850306570529938,\n  0.38636016845703125,\n  0.38769111037254333,\n  0.38902348279953003,\n  0.39035725593566895,\n  0.39169245958328247,\n  0.3930290639400482,\n  0.3943670392036438,\n  0.3957063853740692,\n  0.39704710245132446,\n  0.39838916063308716,\n  0.3997325599193573,\n  0.4010772705078125,\n  0.40242329239845276,\n  0.4037705957889557,\n  0.4051191806793213,\n  0.40646904706954956,\n  0.4078201651573181,\n  0.40917253494262695,\n  0.4105261266231537,\n  0.4118809401988983,\n  0.41323697566986084,\n  0.4145941734313965,\n  0.41595256328582764,\n  0.4173121452331543,\n  0.4186728596687317,\n  0.4200347065925598,\n  0.42139768600463867,\n  0.42276179790496826,\n  0.4241270124912262,\n  0.4254932999610901,\n  0.4268606901168823,\n  0.42822912335395813,\n  0.4295985996723175,\n  0.43096914887428284,\n  0.43234071135520935,\n  0.43371325731277466,\n  0.43508684635162354,\n  0.4364613890647888,\n  0.4378369450569153,\n  0.43921342492103577,\n  0.44059085845947266,\n  0.44196924567222595,\n  0.44334855675697327,\n  0.4447287619113922,\n  0.4461098611354828,\n  0.447491854429245,\n  0.44887474179267883,\n  0.4502584636211395,\n  0.4516430199146271,\n  0.4530284106731415,\n  0.45441463589668274,\n  0.45580166578292847,\n  0.4571894705295563,\n  0.45857805013656616,\n  0.45996740460395813,\n  0.4613575339317322,\n  0.46274837851524353,\n  0.4641399681568146,\n  0.4655322730541229,\n  0.4669252634048462,\n  0.4683189392089844,\n  0.4697133004665375,\n  0.4711083173751831,\n  0.47250398993492126,\n  0.47390028834342957,\n  0.475297212600708,\n  0.4766947329044342,\n  0.47809287905693054,\n  0.47949159145355225,\n  0.4808908700942993,\n  0.48229071497917175,\n  0.48369109630584717,\n  0.48509201407432556,\n  0.48649343848228455,\n  0.4878953695297241,\n  0.4892977774143219,\n  0.49070069193840027,\n  0.49210405349731445,\n  0.49350786209106445,\n  0.49491211771965027,\n  0.4963167905807495,\n  0.4977218806743622,\n  0.4991273581981659,\n  0.5005332231521606,\n  0.5019394755363464,\n  0.5033460855484009,\n  0.504753053188324,\n  0.506160318851471,\n  0.5075678825378418,\n  0.5089758038520813,\n  0.5103839635848999,\n  0.5117924809455872,\n  0.5132011771202087,\n  0.5146101713180542,\n  0.5160194039344788,\n  0.5174288749694824,\n  0.5188385248184204,\n  0.5202484130859375,\n  0.5216584801673889,\n  0.5230686664581299,\n  0.5244790315628052,\n  0.5258895754814148,\n  0.527300238609314,\n  0.5287110209465027,\n  0.530121922492981,\n  0.531532883644104,\n  0.5329439640045166,\n  0.534355103969574,\n  0.5357662439346313,\n  0.5371775031089783,\n  0.5385887622833252,\n  0.5400000214576721,\n  0.541411280632019,\n  0.5428224802017212,\n  0.5442337393760681,\n  0.5456448793411255,\n  0.5470560193061829,\n  0.5484670996665955,\n  0.5498780608177185,\n  0.5512889623641968,\n  0.5526997447013855,\n  0.5541104078292847,\n  0.5555209517478943,\n  0.5569313168525696,\n  0.5583415627479553,\n  0.559751570224762,\n  0.561161458492279,\n  0.562571108341217,\n  0.5639805793762207,\n  0.5653898119926453,\n  0.5667988061904907,\n  0.5682075619697571,\n  0.5696160197257996,\n  0.5710241794586182,\n  0.5724321007728577,\n  0.5738397240638733,\n  0.5752469897270203,\n  0.5766538977622986,\n  0.578060507774353,\n  0.5794667601585388,\n  0.580872654914856,\n  0.5822781324386597,\n  0.58368319272995,\n  0.5850878953933716,\n  0.586492121219635,\n  0.587895929813385,\n  0.5892993211746216,\n  0.5907022356987,\n  0.5921046137809753,\n  0.5935065746307373,\n  0.5949079990386963,\n  0.5963088870048523,\n  0.5977092981338501,\n  0.5991091132164001,\n  0.6005083918571472,\n  0.6019071340560913,\n  0.6033052802085876,\n  0.6047027707099915,\n  0.6060997247695923,\n  0.6074960231781006,\n  0.6088916659355164,\n  0.6102867126464844,\n  0.6116810441017151,\n  0.6130747199058533,\n  0.6144677400588989,\n  0.6158600449562073,\n  0.6172516345977783,\n  0.6186424493789673,\n  0.6200326085090637,\n  0.6214219331741333,\n  0.6228105425834656,\n  0.6241983771324158,\n  0.6255853772163391,\n  0.6269716024398804,\n  0.6283569931983948,\n  0.6297415494918823,\n  0.631125271320343,\n  0.6325081586837769,\n  0.6338901519775391,\n  0.6352712512016296,\n  0.6366514563560486,\n  0.6380307674407959,\n  0.6394091248512268,\n  0.6407865881919861,\n  0.6421630382537842,\n  0.6435385942459106,\n  0.6449131369590759,\n  0.6462867259979248,\n  0.6476593017578125,\n  0.649030864238739,\n  0.6504014134407043,\n  0.6517708897590637,\n  0.6531393527984619,\n  0.6545066833496094,\n  0.6558730006217957,\n  0.6572381854057312,\n  0.6586022973060608,\n  0.6599652767181396,\n  0.6613271236419678,\n  0.6626878976821899,\n  0.6640474200248718,\n  0.665405809879303,\n  0.6667630076408386,\n  0.6681190729141235,\n  0.6694738864898682,\n  0.6708274483680725,\n  0.6721798181533813,\n  0.6735309362411499,\n  0.6748808026313782,\n  0.6762294173240662,\n  0.6775767207145691,\n  0.678922712802887,\n  0.6802674531936646,\n  0.6816108226776123,\n  0.682952880859375,\n  0.6842936277389526,\n  0.6856329441070557,\n  0.6869709491729736,\n  0.688307523727417,\n  0.6896427273750305,\n  0.6909765005111694,\n  0.6923089027404785,\n  0.6936398148536682,\n  0.6949693560600281,\n  0.6962973475456238,\n  0.6976239085197449,\n  0.6989490389823914,\n  0.7002726197242737,\n  0.7015946507453918,\n  0.7029152512550354,\n  0.70423424243927,\n  0.7055517435073853,\n  0.7068676352500916,\n  0.7081819772720337,\n  0.7094947695732117,\n  0.7108058929443359,\n  0.712115466594696,\n  0.7134234309196472,\n  0.7147297263145447,\n  0.7160343527793884,\n  0.7173373699188232,\n  0.7186387181282043,\n  0.7199383974075317,\n  0.7212363481521606,\n  0.7225325703620911,\n  0.7238271236419678,\n  0.725119948387146,\n  0.726410984992981,\n  0.7277002930641174,\n  0.7289878726005554,\n  0.7302736043930054,\n  0.7315576076507568,\n  0.7328397631645203,\n  0.7341201305389404,\n  0.7353986501693726,\n  0.7366753220558167,\n  0.7379502058029175,\n  0.7392231822013855,\n  0.7404942512512207,\n  0.7417634725570679,\n  0.7430307865142822,\n  0.7442961931228638,\n  0.7455596923828125,\n  0.7468212246894836,\n  0.7480807900428772,\n  0.7493384480476379,\n  0.7505941390991211,\n  0.7518478035926819,\n  0.7530995011329651,\n  0.7543491721153259,\n  0.7555968761444092,\n  0.7568424940109253,\n  0.758086085319519,\n  0.7593276500701904,\n  0.7605671286582947,\n  0.7618045210838318,\n  0.7630398273468018,\n  0.7642730474472046,\n  0.7655041813850403,\n  0.7667331695556641,\n  0.7679600119590759,\n  0.7691847085952759,\n  0.7704072594642639,\n  0.77162766456604,\n  0.7728458642959595,\n  0.7740618586540222,\n  0.7752756476402283,\n  0.7764872908592224,\n  0.7776966094970703,\n  0.7789037823677063,\n  0.780108630657196,\n  0.7813112735748291,\n  0.7825115919113159,\n  0.7837096452713013,\n  0.7849054336547852,\n  0.7860988974571228,\n  0.7872900366783142,\n  0.7884788513183594,\n  0.7896653413772583,\n  0.790849506855011,\n  0.7920312881469727,\n  0.7932106852531433,\n  0.794387698173523,\n  0.7955623269081116,\n  0.7967345118522644,\n  0.7979043126106262,\n  0.7990716695785522,\n  0.8002366423606873,\n  0.8013991117477417,\n  0.8025591373443604,\n  0.8037167191505432,\n  0.8048717975616455,\n  0.8060243725776672,\n  0.8071744441986084,\n  0.8083219528198242,\n  0.8094670176506042,\n  0.8106095194816589,\n  0.8117494583129883,\n  0.8128868341445923,\n  0.8140217065811157,\n  0.8151538968086243,\n  0.8162835836410522,\n  0.8174106478691101,\n  0.8185350894927979,\n  0.8196569085121155,\n  0.820776104927063,\n  0.8218926191329956,\n  0.8230065107345581,\n  0.8241177797317505,\n  0.8252263069152832,\n  0.8263322114944458,\n  0.8274353742599487,\n  0.8285358548164368,\n  0.8296335935592651,\n  0.8307285904884338,\n  0.8318209052085876,\n  0.8329104781150818,\n  0.8339972496032715,\n  0.8350812792778015,\n  0.8361625075340271,\n  0.837240993976593,\n  0.8383166193962097,\n  0.8393895030021667,\n  0.8404595255851746,\n  0.8415266871452332,\n  0.8425911068916321,\n  0.843652606010437,\n  0.8447112441062927,\n  0.8457670211791992,\n  0.8468199372291565,\n  0.8478699922561646,\n  0.8489171266555786,\n  0.8499613404273987,\n  0.8510026335716248,\n  0.8520410060882568,\n  0.8530764579772949,\n  0.8541089296340942,\n  0.8551384806632996,\n  0.8561650514602661,\n  0.8571886420249939,\n  0.8582092523574829,\n  0.8592268824577332,\n  0.8602414727210999,\n  0.8612530827522278,\n  0.8622616529464722,\n  0.863267183303833,\n  0.8642696738243103,\n  0.865269124507904,\n  0.8662654757499695,\n  0.8672587871551514,\n  0.8682490587234497,\n  0.869236171245575,\n  0.8702202439308167,\n  0.8712011575698853,\n  0.8721789717674255,\n  0.8731536865234375,\n  0.8741251826286316,\n  0.8750936388969421,\n  0.8760588765144348,\n  0.8770209550857544,\n  0.8779798746109009,\n  0.8789356350898743,\n  0.8798881769180298,\n  0.8808375000953674,\n  0.881783664226532,\n  0.8827266097068787,\n  0.8836662769317627,\n  0.8846027255058289,\n  0.8855359554290771,\n  0.8864659070968628,\n  0.8873926401138306,\n  0.8883160948753357,\n  0.8892362117767334,\n  0.8901531100273132,\n  0.8910666704177856,\n  0.8919769525527954,\n  0.8928838968276978,\n  0.8937875628471375,\n  0.894687831401825,\n  0.8955848217010498,\n  0.8964784145355225,\n  0.8973686695098877,\n  0.8982555866241455,\n  0.8991391062736511,\n  0.9000192880630493,\n  0.9008960127830505,\n  0.9017693996429443,\n  0.9026393294334412,\n  0.9035059213638306,\n  0.9043689966201782,\n  0.9052287340164185,\n  0.9060849547386169,\n  0.9069377779960632,\n  0.9077871441841125,\n  0.9086330533027649,\n  0.9094754457473755,\n  0.9103144407272339,\n  0.9111498594284058,\n  0.9119818210601807,\n  0.9128103256225586,\n  0.91363525390625,\n  0.9144567251205444,\n  0.9152746200561523,\n  0.9160889983177185,\n  0.9168998599052429,\n  0.9177071452140808,\n  0.918510913848877,\n  0.9193111062049866,\n  0.9201076626777649,\n  0.9209007024765015,\n  0.9216901659965515,\n  0.9224759936332703,\n  0.9232583045959473,\n  0.9240369200706482,\n  0.9248119592666626,\n  0.9255833625793457,\n  0.9263511300086975,\n  0.927115261554718,\n  0.927875816822052,\n  0.9286326169967651,\n  0.9293858408927917,\n  0.9301353693008423,\n  0.9308812022209167,\n  0.9316233992576599,\n  0.932361900806427,\n  0.9330966472625732,\n  0.9338277578353882,\n  0.934555172920227,\n  0.9352788329124451,\n  0.935998797416687,\n  0.9367150068283081,\n  0.9374275207519531,\n  0.9381362795829773,\n  0.9388412833213806,\n  0.9395425319671631,\n  0.9402400255203247,\n  0.9409337639808655,\n  0.9416236877441406,\n  0.9423098564147949,\n  0.9429922699928284,\n  0.9436708092689514,\n  0.9443456530570984,\n  0.945016622543335,\n  0.9456837773323059,\n  0.9463471174240112,\n  0.9470066428184509,\n  0.947662353515625,\n  0.9483142495155334,\n  0.9489622712135315,\n  0.9496064186096191,\n  0.9502467513084412,\n  0.950883150100708,\n  0.9515157341957092,\n  0.9521445035934448,\n  0.9527692794799805,\n  0.9533902406692505,\n  0.9540073275566101,\n  0.9546204805374146,\n  0.9552296996116638,\n  0.9558351039886475,\n  0.9564365148544312,\n  0.9570340514183044,\n  0.9576275944709778,\n  0.9582172632217407,\n  0.9588029980659485,\n  0.9593847990036011,\n  0.9599626064300537,\n  0.9605364799499512,\n  0.9611064195632935,\n  0.9616723656654358,\n  0.962234377861023,\n  0.9627923965454102,\n  0.9633464217185974,\n  0.9638964533805847,\n  0.9644424915313721,\n  0.9649845957756042,\n  0.9655226469039917,\n  0.9660567045211792,\n  0.9665867686271667,\n  0.9671127796173096,\n  0.9676347970962524,\n  0.9681528210639954,\n  0.9686667919158936,\n  0.969176709651947,\n  0.9696825742721558,\n  0.9701843857765198,\n  0.9706822037696838,\n  0.9711759686470032,\n  0.971665620803833,\n  0.9721512198448181,\n  0.9726327657699585,\n  0.9731102585792542,\n  0.9735836982727051,\n  0.9740529656410217,\n  0.9745182394981384,\n  0.9749793410301208,\n  0.9754364490509033,\n  0.9758893847465515,\n  0.9763382077217102,\n  0.9767829775810242,\n  0.9772235751152039,\n  0.9776601195335388,\n  0.9780924916267395,\n  0.9785207509994507,\n  0.9789448976516724,\n  0.9793649315834045,\n  0.9797807931900024,\n  0.9801925420761108,\n  0.9806001782417297,\n  0.9810035824775696,\n  0.9814028739929199,\n  0.9817980527877808,\n  0.9821889996528625,\n  0.9825758337974548,\n  0.9829584956169128,\n  0.9833369851112366,\n  0.983711302280426,\n  0.9840814471244812,\n  0.9844474196434021,\n  0.984809160232544,\n  0.9851667881011963,\n  0.9855201840400696,\n  0.9858693480491638,\n  0.9862143993377686,\n  0.9865551590919495,\n  0.9868918061256409,\n  0.9872241616249084,\n  0.9875524044036865,\n  0.9878763556480408,\n  0.9881961345672607,\n  0.9885116815567017,\n  0.9888229966163635,\n  0.9891300797462463,\n  0.9894329309463501,\n  0.9897316098213196,\n  0.9900259971618652,\n  0.9903161525726318,\n  0.9906020760536194,\n  0.9908837676048279,\n  0.9911612272262573,\n  0.9914344549179077,\n  0.9917033910751343,\n  0.9919680953025818,\n  0.9922285079956055,\n  0.9924846887588501,\n  0.9927366375923157,\n  0.9929842948913574,\n  0.9932277202606201,\n  0.993466854095459,\n  0.993701696395874,\n  0.99393230676651,\n  0.9941586256027222,\n  0.9943807125091553,\n  0.9945985078811646,\n  0.9948119521141052,\n  0.9950212240219116,\n  0.9952261447906494,\n  0.9954267740249634,\n  0.9956231117248535,\n  0.9958152174949646,\n  0.9960029721260071,\n  0.9961864948272705,\n  0.9963656663894653,\n  0.9965406060218811,\n  0.9967111945152283,\n  0.9968774914741516,\n  0.9970394968986511,\n  0.9971972107887268,\n  0.9973506331443787,\n  0.9974997043609619,\n  0.9976444840431213,\n  0.9977849721908569,\n  0.9979211688041687,\n  0.9980530142784119,\n  0.9981805682182312,\n  0.9983038306236267,\n  0.9984227418899536,\n  0.9985373616218567,\n  0.9986476302146912,\n  0.9987536072731018,\n  0.9988552927970886,\n  0.9989526271820068,\n  0.9990456104278564,\n  0.9991343021392822,\n  0.9992187023162842,\n  0.9992987513542175,\n  0.999374508857727,\n  0.999445915222168,\n  0.9995129704475403,\n  0.9995757341384888,\n  0.9996342062950134,\n  0.9996882677078247,\n  0.9997380971908569,\n  0.9997835159301758,\n  0.9998246431350708,\n  0.999861478805542,\n  0.9998939037322998,\n  0.9999220967292786,\n  0.999945878982544,\n  0.9999653697013855,\n  0.9999805092811584,\n  0.9999913573265076,\n  0.9999978542327881,\n  1,\n  0.9999978542327881,\n  0.9999913573265076,\n  0.9999805092811584,\n  0.9999653697013855,\n  0.999945878982544,\n  0.9999220967292786,\n  0.9998939037322998,\n  0.999861478805542,\n  0.9998246431350708,\n  0.9997835159301758,\n  0.9997380971908569,\n  0.9996882677078247,\n  0.9996342062950134,\n  0.9995757341384888,\n  0.9995129704475403,\n  0.999445915222168,\n  0.999374508857727,\n  0.9992987513542175,\n  0.9992187023162842,\n  0.9991343021392822,\n  0.9990456104278564,\n  0.9989526271820068,\n  0.9988552927970886,\n  0.9987536072731018,\n  0.9986476302146912,\n  0.9985373616218567,\n  0.9984227418899536,\n  0.9983038306236267,\n  0.9981805682182312,\n  0.9980530142784119,\n  0.9979211688041687,\n  0.9977849721908569,\n  0.9976444840431213,\n  0.9974997043609619,\n  0.9973506331443787,\n  0.9971972107887268,\n  0.9970394968986511,\n  0.9968774914741516,\n  0.9967111945152283,\n  0.9965406060218811,\n  0.9963656663894653,\n  0.9961864948272705,\n  0.9960029721260071,\n  0.9958152174949646,\n  0.9956231117248535,\n  0.9954267740249634,\n  0.9952261447906494,\n  0.9950212240219116,\n  0.9948119521141052,\n  0.9945985078811646,\n  0.9943807125091553,\n  0.9941586256027222,\n  0.99393230676651,\n  0.993701696395874,\n  0.993466854095459,\n  0.9932277202606201,\n  0.9929842948913574,\n  0.9927366375923157,\n  0.9924846887588501,\n  0.9922285079956055,\n  0.9919680953025818,\n  0.9917033910751343,\n  0.9914344549179077,\n  0.9911612272262573,\n  0.9908837676048279,\n  0.9906020760536194,\n  0.9903161525726318,\n  0.9900259971618652,\n  0.9897316098213196,\n  0.9894329309463501,\n  0.9891300797462463,\n  0.9888229966163635,\n  0.9885116815567017,\n  0.9881961345672607,\n  0.9878763556480408,\n  0.9875524044036865,\n  0.9872241616249084,\n  0.9868918061256409,\n  0.9865551590919495,\n  0.9862143993377686,\n  0.9858693480491638,\n  0.9855201840400696,\n  0.9851667881011963,\n  0.984809160232544,\n  0.9844474196434021,\n  0.9840814471244812,\n  0.983711302280426,\n  0.9833369851112366,\n  0.9829584956169128,\n  0.9825758337974548,\n  0.9821889996528625,\n  0.9817980527877808,\n  0.9814028739929199,\n  0.9810035824775696,\n  0.9806001782417297,\n  0.9801925420761108,\n  0.9797807931900024,\n  0.9793649315834045,\n  0.9789448976516724,\n  0.9785207509994507,\n  0.9780924916267395,\n  0.9776601195335388,\n  0.9772235751152039,\n  0.9767829775810242,\n  0.9763382077217102,\n  0.9758893847465515,\n  0.9754364490509033,\n  0.9749793410301208,\n  0.9745182394981384,\n  0.9740529656410217,\n  0.9735836982727051,\n  0.9731102585792542,\n  0.9726327657699585,\n  0.9721512198448181,\n  0.971665620803833,\n  0.9711759686470032,\n  0.9706822037696838,\n  0.9701843857765198,\n  0.9696825742721558,\n  0.969176709651947,\n  0.9686667919158936,\n  0.9681528210639954,\n  0.9676347970962524,\n  0.9671127796173096,\n  0.9665867686271667,\n  0.9660567045211792,\n  0.9655226469039917,\n  0.9649845957756042,\n  0.9644424915313721,\n  0.9638964533805847,\n  0.9633464217185974,\n  0.9627923965454102,\n  0.962234377861023,\n  0.9616723656654358,\n  0.9611064195632935,\n  0.9605364799499512,\n  0.9599626064300537,\n  0.9593847990036011,\n  0.9588029980659485,\n  0.9582172632217407,\n  0.9576275944709778,\n  0.9570340514183044,\n  0.9564365148544312,\n  0.9558351039886475,\n  0.9552296996116638,\n  0.9546204805374146,\n  0.9540073275566101,\n  0.9533902406692505,\n  0.9527692794799805,\n  0.9521445035934448,\n  0.9515157341957092,\n  0.950883150100708,\n  0.9502467513084412,\n  0.9496064186096191,\n  0.9489622712135315,\n  0.9483142495155334,\n  0.947662353515625,\n  0.9470066428184509,\n  0.9463471174240112,\n  0.9456837773323059,\n  0.945016622543335,\n  0.9443456530570984,\n  0.9436708092689514,\n  0.9429922699928284,\n  0.9423098564147949,\n  0.9416236877441406,\n  0.9409337639808655,\n  0.9402400255203247,\n  0.9395425319671631,\n  0.9388412833213806,\n  0.9381362795829773,\n  0.9374275207519531,\n  0.9367150068283081,\n  0.935998797416687,\n  0.9352788329124451,\n  0.934555172920227,\n  0.9338277578353882,\n  0.9330966472625732,\n  0.932361900806427,\n  0.9316233992576599,\n  0.9308812022209167,\n  0.9301353693008423,\n  0.9293858408927917,\n  0.9286326169967651,\n  0.927875816822052,\n  0.927115261554718,\n  0.9263511300086975,\n  0.9255833625793457,\n  0.9248119592666626,\n  0.9240369200706482,\n  0.9232583045959473,\n  0.9224759936332703,\n  0.9216901659965515,\n  0.9209007024765015,\n  0.9201076626777649,\n  0.9193111062049866,\n  0.918510913848877,\n  0.9177071452140808,\n  0.9168998599052429,\n  0.9160889983177185,\n  0.9152746200561523,\n  0.9144567251205444,\n  0.91363525390625,\n  0.9128103256225586,\n  0.9119818210601807,\n  0.9111498594284058,\n  0.9103144407272339,\n  0.9094754457473755,\n  0.9086330533027649,\n  0.9077871441841125,\n  0.9069377779960632,\n  0.9060849547386169,\n  0.9052287340164185,\n  0.9043689966201782,\n  0.9035059213638306,\n  0.9026393294334412,\n  0.9017693996429443,\n  0.9008960127830505,\n  0.9000192880630493,\n  0.8991391062736511,\n  0.8982555866241455,\n  0.8973686695098877,\n  0.8964784145355225,\n  0.8955848217010498,\n  0.894687831401825,\n  0.8937875628471375,\n  0.8928838968276978,\n  0.8919769525527954,\n  0.8910666704177856,\n  0.8901531100273132,\n  0.8892362117767334,\n  0.8883160948753357,\n  0.8873926401138306,\n  0.8864659070968628,\n  0.8855359554290771,\n  0.8846027255058289,\n  0.8836662769317627,\n  0.8827266097068787,\n  0.881783664226532,\n  0.8808375000953674,\n  0.8798881769180298,\n  0.8789356350898743,\n  0.8779798746109009,\n  0.8770209550857544,\n  0.8760588765144348,\n  0.8750936388969421,\n  0.8741251826286316,\n  0.8731536865234375,\n  0.8721789717674255,\n  0.8712011575698853,\n  0.8702202439308167,\n  0.869236171245575,\n  0.8682490587234497,\n  0.8672587871551514,\n  0.8662654757499695,\n  0.865269124507904,\n  0.8642696738243103,\n  0.863267183303833,\n  0.8622616529464722,\n  0.8612530827522278,\n  0.8602414727210999,\n  0.8592268824577332,\n  0.8582092523574829,\n  0.8571886420249939,\n  0.8561650514602661,\n  0.8551384806632996,\n  0.8541089296340942,\n  0.8530764579772949,\n  0.8520410060882568,\n  0.8510026335716248,\n  0.8499613404273987,\n  0.8489171266555786,\n  0.8478699922561646,\n  0.8468199372291565,\n  0.8457670211791992,\n  0.8447112441062927,\n  0.843652606010437,\n  0.8425911068916321,\n  0.8415266871452332,\n  0.8404595255851746,\n  0.8393895030021667,\n  0.8383166193962097,\n  0.837240993976593,\n  0.8361625075340271,\n  0.8350812792778015,\n  0.8339972496032715,\n  0.8329104781150818,\n  0.8318209052085876,\n  0.8307285904884338,\n  0.8296335935592651,\n  0.8285358548164368,\n  0.8274353742599487,\n  0.8263322114944458,\n  0.8252263069152832,\n  0.8241177797317505,\n  0.8230065107345581,\n  0.8218926191329956,\n  0.820776104927063,\n  0.8196569085121155,\n  0.8185350894927979,\n  0.8174106478691101,\n  0.8162835836410522,\n  0.8151538968086243,\n  0.8140217065811157,\n  0.8128868341445923,\n  0.8117494583129883,\n  0.8106095194816589,\n  0.8094670176506042,\n  0.8083219528198242,\n  0.8071744441986084,\n  0.8060243725776672,\n  0.8048717975616455,\n  0.8037167191505432,\n  0.8025591373443604,\n  0.8013991117477417,\n  0.8002366423606873,\n  0.7990716695785522,\n  0.7979043126106262,\n  0.7967345118522644,\n  0.7955623269081116,\n  0.794387698173523,\n  0.7932106852531433,\n  0.7920312881469727,\n  0.790849506855011,\n  0.7896653413772583,\n  0.7884788513183594,\n  0.7872900366783142,\n  0.7860988974571228,\n  0.7849054336547852,\n  0.7837096452713013,\n  0.7825115919113159,\n  0.7813112735748291,\n  0.780108630657196,\n  0.7789037823677063,\n  0.7776966094970703,\n  0.7764872908592224,\n  0.7752756476402283,\n  0.7740618586540222,\n  0.7728458642959595,\n  0.77162766456604,\n  0.7704072594642639,\n  0.7691847085952759,\n  0.7679600119590759,\n  0.7667331695556641,\n  0.7655041813850403,\n  0.7642730474472046,\n  0.7630398273468018,\n  0.7618045210838318,\n  0.7605671286582947,\n  0.7593276500701904,\n  0.758086085319519,\n  0.7568424940109253,\n  0.7555968761444092,\n  0.7543491721153259,\n  0.7530995011329651,\n  0.7518478035926819,\n  0.7505941390991211,\n  0.7493384480476379,\n  0.7480807900428772,\n  0.7468212246894836,\n  0.7455596923828125,\n  0.7442961931228638,\n  0.7430307865142822,\n  0.7417634725570679,\n  0.7404942512512207,\n  0.7392231822013855,\n  0.7379502058029175,\n  0.7366753220558167,\n  0.7353986501693726,\n  0.7341201305389404,\n  0.7328397631645203,\n  0.7315576076507568,\n  0.7302736043930054,\n  0.7289878726005554,\n  0.7277002930641174,\n  0.726410984992981,\n  0.725119948387146,\n  0.7238271236419678,\n  0.7225325703620911,\n  0.7212363481521606,\n  0.7199383974075317,\n  0.7186387181282043,\n  0.7173373699188232,\n  0.7160343527793884,\n  0.7147297263145447,\n  0.7134234309196472,\n  0.712115466594696,\n  0.7108058929443359,\n  0.7094947695732117,\n  0.7081819772720337,\n  0.7068676352500916,\n  0.7055517435073853,\n  0.70423424243927,\n  0.7029152512550354,\n  0.7015946507453918,\n  0.7002726197242737,\n  0.6989490389823914,\n  0.6976239085197449,\n  0.6962973475456238,\n  0.6949693560600281,\n  0.6936398148536682,\n  0.6923089027404785,\n  0.6909765005111694,\n  0.6896427273750305,\n  0.688307523727417,\n  0.6869709491729736,\n  0.6856329441070557,\n  0.6842936277389526,\n  0.682952880859375,\n  0.6816108226776123,\n  0.6802674531936646,\n  0.678922712802887,\n  0.6775767207145691,\n  0.6762294173240662,\n  0.6748808026313782,\n  0.6735309362411499,\n  0.6721798181533813,\n  0.6708274483680725,\n  0.6694738864898682,\n  0.6681190729141235,\n  0.6667630076408386,\n  0.665405809879303,\n  0.6640474200248718,\n  0.6626878976821899,\n  0.6613271236419678,\n  0.6599652767181396,\n  0.6586022973060608,\n  0.6572381854057312,\n  0.6558730006217957,\n  0.6545066833496094,\n  0.6531393527984619,\n  0.6517708897590637,\n  0.6504014134407043,\n  0.649030864238739,\n  0.6476593017578125,\n  0.6462867259979248,\n  0.6449131369590759,\n  0.6435385942459106,\n  0.6421630382537842,\n  0.6407865881919861,\n  0.6394091248512268,\n  0.6380307674407959,\n  0.6366514563560486,\n  0.6352712512016296,\n  0.6338901519775391,\n  0.6325081586837769,\n  0.631125271320343,\n  0.6297415494918823,\n  0.6283569931983948,\n  0.6269716024398804,\n  0.6255853772163391,\n  0.6241983771324158,\n  0.6228105425834656,\n  0.6214219331741333,\n  0.6200326085090637,\n  0.6186424493789673,\n  0.6172516345977783,\n  0.6158600449562073,\n  0.6144677400588989,\n  0.6130747199058533,\n  0.6116810441017151,\n  0.6102867126464844,\n  0.6088916659355164,\n  0.6074960231781006,\n  0.6060997247695923,\n  0.6047027707099915,\n  0.6033052802085876,\n  0.6019071340560913,\n  0.6005083918571472,\n  0.5991091132164001,\n  0.5977092981338501,\n  0.5963088870048523,\n  0.5949079990386963,\n  0.5935065746307373,\n  0.5921046137809753,\n  0.5907022356987,\n  0.5892993211746216,\n  0.587895929813385,\n  0.586492121219635,\n  0.5850878953933716,\n  0.58368319272995,\n  0.5822781324386597,\n  0.580872654914856,\n  0.5794667601585388,\n  0.578060507774353,\n  0.5766538977622986,\n  0.5752469897270203,\n  0.5738397240638733,\n  0.5724321007728577,\n  0.5710241794586182,\n  0.5696160197257996,\n  0.5682075619697571,\n  0.5667988061904907,\n  0.5653898119926453,\n  0.5639805793762207,\n  0.562571108341217,\n  0.561161458492279,\n  0.559751570224762,\n  0.5583415627479553,\n  0.5569313168525696,\n  0.5555209517478943,\n  0.5541104078292847,\n  0.5526997447013855,\n  0.5512889623641968,\n  0.5498780608177185,\n  0.5484670996665955,\n  0.5470560193061829,\n  0.5456448793411255,\n  0.5442337393760681,\n  0.5428224802017212,\n  0.541411280632019,\n  0.5400000214576721,\n  0.5385887622833252,\n  0.5371775031089783,\n  0.5357662439346313,\n  0.534355103969574,\n  0.5329439640045166,\n  0.531532883644104,\n  0.530121922492981,\n  0.5287110209465027,\n  0.527300238609314,\n  0.5258895754814148,\n  0.5244790315628052,\n  0.5230686664581299,\n  0.5216584801673889,\n  0.5202484130859375,\n  0.5188385248184204,\n  0.5174288749694824,\n  0.5160194039344788,\n  0.5146101713180542,\n  0.5132011771202087,\n  0.5117924809455872,\n  0.5103839635848999,\n  0.5089758038520813,\n  0.5075678825378418,\n  0.506160318851471,\n  0.504753053188324,\n  0.5033460855484009,\n  0.5019394755363464,\n  0.5005332231521606,\n  0.4991273581981659,\n  0.4977218806743622,\n  0.4963167905807495,\n  0.49491211771965027,\n  0.49350786209106445,\n  0.49210405349731445,\n  0.49070069193840027,\n  0.4892977774143219,\n  0.4878953695297241,\n  0.48649343848228455,\n  0.48509201407432556,\n  0.48369109630584717,\n  0.48229071497917175,\n  0.4808908700942993,\n  0.47949159145355225,\n  0.47809287905693054,\n  0.4766947329044342,\n  0.475297212600708,\n  0.47390028834342957,\n  0.47250398993492126,\n  0.4711083173751831,\n  0.4697133004665375,\n  0.4683189392089844,\n  0.4669252634048462,\n  0.4655322730541229,\n  0.4641399681568146,\n  0.46274837851524353,\n  0.4613575339317322,\n  0.45996740460395813,\n  0.45857805013656616,\n  0.4571894705295563,\n  0.45580166578292847,\n  0.45441463589668274,\n  0.4530284106731415,\n  0.4516430199146271,\n  0.4502584636211395,\n  0.44887474179267883,\n  0.447491854429245,\n  0.4461098611354828,\n  0.4447287619113922,\n  0.44334855675697327,\n  0.44196924567222595,\n  0.44059085845947266,\n  0.43921342492103577,\n  0.4378369450569153,\n  0.4364613890647888,\n  0.43508684635162354,\n  0.43371325731277466,\n  0.43234071135520935,\n  0.43096914887428284,\n  0.4295985996723175,\n  0.42822912335395813,\n  0.4268606901168823,\n  0.4254932999610901,\n  0.4241270124912262,\n  0.42276179790496826,\n  0.42139768600463867,\n  0.4200347065925598,\n  0.4186728596687317,\n  0.4173121452331543,\n  0.41595256328582764,\n  0.4145941734313965,\n  0.41323697566986084,\n  0.4118809401988983,\n  0.4105261266231537,\n  0.40917253494262695,\n  0.4078201651573181,\n  0.40646904706954956,\n  0.4051191806793213,\n  0.4037705957889557,\n  0.40242329239845276,\n  0.4010772705078125,\n  0.3997325599193573,\n  0.39838916063308716,\n  0.39704710245132446,\n  0.3957063853740692,\n  0.3943670392036438,\n  0.3930290639400482,\n  0.39169245958328247,\n  0.39035725593566895,\n  0.38902348279953003,\n  0.38769111037254333,\n  0.38636016845703125,\n  0.3850306570529938,\n  0.3837026357650757,\n  0.3823760747909546,\n  0.3810510039329529,\n  0.37972739338874817,\n  0.3784053325653076,\n  0.37708479166030884,\n  0.37576577067375183,\n  0.3744482696056366,\n  0.3731323778629303,\n  0.37181803584098816,\n  0.3705052435398102,\n  0.3691940903663635,\n  0.3678845167160034,\n  0.36657658219337463,\n  0.3652702867984772,\n  0.36396563053131104,\n  0.3626626133918762,\n  0.3613612651824951,\n  0.3600616157054901,\n  0.3587636649608612,\n  0.3574674129486084,\n  0.3561728596687317,\n  0.35488006472587585,\n  0.3535889983177185,\n  0.35229969024658203,\n  0.35101214051246643,\n  0.3497263789176941,\n  0.348442405462265,\n  0.3471602201461792,\n  0.3458798825740814,\n  0.3446013331413269,\n  0.3433246612548828,\n  0.34204980731010437,\n  0.34077683091163635,\n  0.33950573205947876,\n  0.338236540555954,\n  0.3369692265987396,\n  0.3357038199901581,\n  0.33444032073020935,\n  0.3331787884235382,\n  0.33191919326782227,\n  0.3306615352630615,\n  0.32940587401390076,\n  0.3281521797180176,\n  0.32690051198005676,\n  0.32565081119537354,\n  0.32440313696861267,\n  0.32315748929977417,\n  0.3219138979911804,\n  0.3206723630428314,\n  0.3194328844547272,\n  0.3181954622268677,\n  0.3169601559638977,\n  0.3157269358634949,\n  0.31449583172798157,\n  0.3132668435573578,\n  0.31203997135162354,\n  0.3108152747154236,\n  0.30959272384643555,\n  0.3083723485469818,\n  0.3071541488170624,\n  0.30593812465667725,\n  0.3047243356704712,\n  0.3035127520561218,\n  0.30230337381362915,\n  0.30109623074531555,\n  0.2998913526535034,\n  0.29868873953819275,\n  0.29748839139938354,\n  0.2962903380393982,\n  0.2950945496559143,\n  0.29390108585357666,\n  0.29270994663238525,\n  0.2915211319923401,\n  0.29033464193344116,\n  0.28915050625801086,\n  0.2879687249660492,\n  0.28678932785987854,\n  0.2856123149394989,\n  0.2844376862049103,\n  0.28326547145843506,\n  0.28209567070007324,\n  0.2809283137321472,\n  0.2797633707523346,\n  0.27860087156295776,\n  0.2774408459663391,\n  0.27628329396247864,\n  0.27512824535369873,\n  0.2739756405353546,\n  0.27282556891441345,\n  0.27167803049087524,\n  0.2705329954624176,\n  0.2693904936313629,\n  0.2682505249977112,\n  0.2671131491661072,\n  0.26597830653190613,\n  0.2648460865020752,\n  0.2637164294719696,\n  0.26258936524391174,\n  0.261464923620224,\n  0.26034310460090637,\n  0.25922390818595886,\n  0.25810736417770386,\n  0.25699347257614136,\n  0.25588223338127136,\n  0.25477367639541626,\n  0.25366780161857605,\n  0.2525646388530731,\n  0.2514641582965851,\n  0.2503664195537567,\n  0.24927137792110443,\n  0.248179093003273,\n  0.24708954989910126,\n  0.24600274860858917,\n  0.24491873383522034,\n  0.24383749067783356,\n  0.24275903403759003,\n  0.24168337881565094,\n  0.2406105250120163,\n  0.2395404875278473,\n  0.23847328126430511,\n  0.23740892112255096,\n  0.23634740710258484,\n  0.23528873920440674,\n  0.23423294723033905,\n  0.23318003118038177,\n  0.2321300059556961,\n  0.23108288645744324,\n  0.23003865778446198,\n  0.2289973497390747,\n  0.22795897722244263,\n  0.22692354023456573,\n  0.22589105367660522,\n  0.2248615175485611,\n  0.22383494675159454,\n  0.22281135618686676,\n  0.22179074585437775,\n  0.2207731306552887,\n  0.2197585254907608,\n  0.21874693036079407,\n  0.21773836016654968,\n  0.21673281490802765,\n  0.21573032438755035,\n  0.2147308737039566,\n  0.2137344926595688,\n  0.2127411961555481,\n  0.21175095438957214,\n  0.2107638269662857,\n  0.2097797840833664,\n  0.2087988406419754,\n  0.20782102644443512,\n  0.20684634149074554,\n  0.20587478578090668,\n  0.2049063742160797,\n  0.20394112169742584,\n  0.20297902822494507,\n  0.20202010869979858,\n  0.20106437802314758,\n  0.20011183619499207,\n  0.19916248321533203,\n  0.19821634888648987,\n  0.19727341830730438,\n  0.19633372128009796,\n  0.1953972578048706,\n  0.1944640427827835,\n  0.19353407621383667,\n  0.19260737299919128,\n  0.19168393313884735,\n  0.19076377153396606,\n  0.18984690308570862,\n  0.188933327794075,\n  0.18802306056022644,\n  0.1871161013841629,\n  0.1862124651670456,\n  0.1853121519088745,\n  0.18441519141197205,\n  0.183521568775177,\n  0.18263129889965057,\n  0.18174441158771515,\n  0.18086087703704834,\n  0.17998072504997253,\n  0.17910397052764893,\n  0.17823059856891632,\n  0.1773606389760971,\n  0.17649409174919128,\n  0.17563097178936005,\n  0.1747712790966034,\n  0.17391502857208252,\n  0.17306222021579742,\n  0.1722128540277481,\n  0.17136695981025696,\n  0.17052453756332397,\n  0.16968558728694916,\n  0.1688501238822937,\n  0.1680181622505188,\n  0.16718968749046326,\n  0.16636472940444946,\n  0.16554328799247742,\n  0.1647253781557083,\n  0.16391098499298096,\n  0.16310013830661774,\n  0.16229283809661865,\n  0.1614890992641449,\n  0.16068892180919647,\n  0.15989230573177338,\n  0.159099280834198,\n  0.15830983221530914,\n  0.157523974776268,\n  0.15674172341823578,\n  0.15596307814121246,\n  0.15518803894519806,\n  0.15441663563251495,\n  0.15364885330200195,\n  0.15288470685482025,\n  0.15212421119213104,\n  0.15136736631393433,\n  0.1506141722202301,\n  0.14986464381217957,\n  0.14911878108978271,\n  0.14837661385536194,\n  0.14763812720775604,\n  0.14690332114696503,\n  0.14617222547531128,\n  0.1454448401927948,\n  0.1447211652994156,\n  0.14400120079517365,\n  0.14328497648239136,\n  0.14257249236106873,\n  0.14186373353004456,\n  0.14115872979164124,\n  0.14045748114585876,\n  0.13975998759269714,\n  0.13906626403331757,\n  0.13837631046772003,\n  0.13769014179706573,\n  0.13700775802135468,\n  0.13632915914058685,\n  0.13565437495708466,\n  0.1349833905696869,\n  0.13431622087955475,\n  0.13365286588668823,\n  0.13299334049224854,\n  0.13233762979507446,\n  0.1316857784986496,\n  0.13103775680065155,\n  0.1303935945034027,\n  0.12975327670574188,\n  0.12911681830883026,\n  0.12848423421382904,\n  0.12785552442073822,\n  0.1272306889295578,\n  0.12660974264144897,\n  0.12599268555641174,\n  0.1253795325756073,\n  0.12477027624845505,\n  0.12416492402553558,\n  0.1235634908080101,\n  0.1229659765958786,\n  0.12237238883972168,\n  0.12178272753953934,\n  0.12119700759649277,\n  0.12061522156000137,\n  0.12003739178180695,\n  0.11946351081132889,\n  0.1188935935497284,\n  0.11832763254642487,\n  0.1177656427025795,\n  0.11720763146877289,\n  0.11665359139442444,\n  0.11610354483127594,\n  0.1155574843287468,\n  0.1150154173374176,\n  0.11447735130786896,\n  0.11394328624010086,\n  0.1134132370352745,\n  0.11288720369338989,\n  0.11236518621444702,\n  0.11184719949960709,\n  0.11133323609828949,\n  0.11082331091165543,\n  0.1103174239397049,\n  0.1098155826330185,\n  0.10931779444217682,\n  0.10882405191659927,\n  0.10833437740802765,\n  0.10784875601530075,\n  0.10736721009016037,\n  0.10688973218202591,\n  0.10641632974147797,\n  0.10594701021909714,\n  0.10548177361488342,\n  0.10502062737941742,\n  0.10456357896327972,\n  0.10411062836647034,\n  0.10366177558898926,\n  0.10321703553199768,\n  0.1027764081954956,\n  0.10233989357948303,\n  0.10190749168395996,\n  0.10147922486066818,\n  0.1010550782084465,\n  0.10063505917787552,\n  0.10021918267011642,\n  0.09980744868516922,\n  0.09939984977245331,\n  0.09899640083312988,\n  0.09859710186719894,\n  0.09820196032524109,\n  0.09781097620725632,\n  0.09742415696382523,\n  0.09704149514436722,\n  0.09666301310062408,\n  0.09628869593143463,\n  0.09591855853796005,\n  0.09555260092020035,\n  0.09519082307815552,\n  0.09483323246240616,\n  0.09447983652353287,\n  0.09413063526153564,\n  0.09378562122583389,\n  0.0934448167681694,\n  0.09310820698738098,\n  0.09277581423521042,\n  0.09244762361049652,\n  0.09212364256381989,\n  0.0918038859963417,\n  0.09148833900690079,\n  0.09117701649665833,\n  0.09086992591619492,\n  0.09056705236434937,\n  0.09026841819286346,\n  0.08997400850057602,\n  0.08968383818864822,\n  0.08939790725708008,\n  0.08911621570587158,\n  0.08883877098560333,\n  0.08856557309627533,\n  0.08829662203788757,\n  0.08803191781044006,\n  0.087771475315094,\n  0.08751528710126877,\n  0.08726336061954498,\n  0.08701568841934204,\n  0.08677228540182114,\n  0.08653314411640167,\n  0.08629827201366425,\n  0.08606767654418945,\n  0.0858413502573967,\n  0.08561929315328598,\n  0.0854015201330185,\n  0.08518802374601364,\n  0.08497880399227142,\n  0.08477386832237244,\n  0.08457322418689728,\n  0.08437686413526535,\n  0.08418478816747665,\n  0.08399700373411179,\n  0.08381351083517075,\n  0.08363431692123413,\n  0.08345941454172134,\n  0.08328881114721298,\n  0.08312250673770905,\n  0.08296050131320953,\n  0.08280279487371445,\n  0.08264939486980438,\n  0.08250029385089874,\n  0.08235550671815872,\n  0.08221502602100372,\n  0.08207885175943375,\n  0.08194699138402939,\n  0.08181943744421005,\n  0.08169619739055634,\n  0.08157727122306824,\n  0.08146265894174576,\n  0.0813523679971695,\n  0.08124639093875885,\n  0.08114472776651382,\n  0.08104738593101501,\n  0.08095436543226242,\n  0.08086566627025604,\n  0.08078128844499588,\n  0.08070123195648193,\n  0.0806254968047142,\n  0.08055409044027328,\n  0.08048700541257858,\n  0.0804242417216301,\n  0.08036581426858902,\n  0.08031170070171356,\n  0.08026192337274551,\n  0.08021646738052368,\n  0.08017534017562866,\n  0.08013854175806046,\n  0.08010607212781906,\n  0.08007793128490448,\n  0.08005411922931671,\n  0.08003463596105576,\n  0.08001948148012161,\n  0.08000865578651428,\n  0.08000216633081436\n]\n"
  },
  {
    "path": "__tests__/data/hamming256.json",
    "content": "[\n 0.07999999821186066,\n 0.08013854175806046,\n 0.08055409044027328,\n 0.08124639093875885,\n 0.08221502602100372,\n 0.08345941454172134,\n 0.08497880399227142,\n 0.08677228540182114,\n 0.08883877098560333,\n 0.09117701649665833,\n 0.09378562122583389,\n 0.09666301310062408,\n 0.09980744868516922,\n 0.10321703553199768,\n 0.10688973218202591,\n 0.11082331091165543,\n 0.1150154173374176,\n 0.11946351081132889,\n 0.12416492402553558,\n 0.12911681830883026,\n 0.13431622087955475,\n 0.13975998759269714,\n 0.1454448401927948,\n 0.15136736631393433,\n 0.157523974776268,\n 0.16391098499298096,\n 0.17052453756332397,\n 0.1773606389760971,\n 0.18441519141197205,\n 0.19168393313884735,\n 0.19916248321533203,\n 0.20684634149074554,\n 0.2147308737039566,\n 0.22281135618686676,\n 0.23108288645744324,\n 0.2395404875278473,\n 0.248179093003273,\n 0.25699347257614136,\n 0.26597830653190613,\n 0.27512824535369873,\n 0.2844376862049103,\n 0.29390108585357666,\n 0.3035127520561218,\n 0.3132668435573578,\n 0.32315748929977417,\n 0.3331787884235382,\n 0.3433246612548828,\n 0.3535889983177185,\n 0.36396563053131104,\n 0.3744482696056366,\n 0.3850306570529938,\n 0.3957063853740692,\n 0.40646904706954956,\n 0.4173121452331543,\n 0.42822912335395813,\n 0.43921342492103577,\n 0.4502584636211395,\n 0.4613575339317322,\n 0.47250398993492126,\n 0.48369109630584717,\n 0.49491211771965027,\n 0.506160318851471,\n 0.5174288749694824,\n 0.5287110209465027,\n 0.5400000214576721,\n 0.5512889623641968,\n 0.562571108341217,\n 0.5738397240638733,\n 0.5850878953933716,\n 0.5963088870048523,\n 0.6074960231781006,\n 0.6186424493789673,\n 0.6297415494918823,\n 0.6407865881919861,\n 0.6517708897590637,\n 0.6626878976821899,\n 0.6735309362411499,\n 0.6842936277389526,\n 0.6949693560600281,\n 0.7055517435073853,\n 0.7160343527793884,\n 0.726410984992981,\n 0.7366753220558167,\n 0.7468212246894836,\n 0.7568424940109253,\n 0.7667331695556641,\n 0.7764872908592224,\n 0.7860988974571228,\n 0.7955623269081116,\n 0.8048717975616455,\n 0.8140217065811157,\n 0.8230065107345581,\n 0.8318209052085876,\n 0.8404595255851746,\n 0.8489171266555786,\n 0.8571886420249939,\n 0.865269124507904,\n 0.8731536865234375,\n 0.8808375000953674,\n 0.8883160948753357,\n 0.8955848217010498,\n 0.9026393294334412,\n 0.9094754457473755,\n 0.9160889983177185,\n 0.9224759936332703,\n 0.9286326169967651,\n 0.934555172920227,\n 0.9402400255203247,\n 0.9456837773323059,\n 0.950883150100708,\n 0.9558351039886475,\n 0.9605364799499512,\n 0.9649845957756042,\n 0.969176709651947,\n 0.9731102585792542,\n 0.9767829775810242,\n 0.9801925420761108,\n 0.9833369851112366,\n 0.9862143993377686,\n 0.9888229966163635,\n 0.9911612272262573,\n 0.9932277202606201,\n 0.9950212240219116,\n 0.9965406060218811,\n 0.9977849721908569,\n 0.9987536072731018,\n 0.999445915222168,\n 0.999861478805542,\n 1,\n 0.999861478805542,\n 0.999445915222168,\n 0.9987536072731018,\n 0.9977849721908569,\n 0.9965406060218811,\n 0.9950212240219116,\n 0.9932277202606201,\n 0.9911612272262573,\n 0.9888229966163635,\n 0.9862143993377686,\n 0.9833369851112366,\n 0.9801925420761108,\n 0.9767829775810242,\n 0.9731102585792542,\n 0.969176709651947,\n 0.9649845957756042,\n 0.9605364799499512,\n 0.9558351039886475,\n 0.950883150100708,\n 0.9456837773323059,\n 0.9402400255203247,\n 0.934555172920227,\n 0.9286326169967651,\n 0.9224759936332703,\n 0.9160889983177185,\n 0.9094754457473755,\n 0.9026393294334412,\n 0.8955848217010498,\n 0.8883160948753357,\n 0.8808375000953674,\n 0.8731536865234375,\n 0.865269124507904,\n 0.8571886420249939,\n 0.8489171266555786,\n 0.8404595255851746,\n 0.8318209052085876,\n 0.8230065107345581,\n 0.8140217065811157,\n 0.8048717975616455,\n 0.7955623269081116,\n 0.7860988974571228,\n 0.7764872908592224,\n 0.7667331695556641,\n 0.7568424940109253,\n 0.7468212246894836,\n 0.7366753220558167,\n 0.726410984992981,\n 0.7160343527793884,\n 0.7055517435073853,\n 0.6949693560600281,\n 0.6842936277389526,\n 0.6735309362411499,\n 0.6626878976821899,\n 0.6517708897590637,\n 0.6407865881919861,\n 0.6297415494918823,\n 0.6186424493789673,\n 0.6074960231781006,\n 0.5963088870048523,\n 0.5850878953933716,\n 0.5738397240638733,\n 0.562571108341217,\n 0.5512889623641968,\n 0.5400000214576721,\n 0.5287110209465027,\n 0.5174288749694824,\n 0.506160318851471,\n 0.49491211771965027,\n 0.48369109630584717,\n 0.47250398993492126,\n 0.4613575339317322,\n 0.4502584636211395,\n 0.43921342492103577,\n 0.42822912335395813,\n 0.4173121452331543,\n 0.40646904706954956,\n 0.3957063853740692,\n 0.3850306570529938,\n 0.3744482696056366,\n 0.36396563053131104,\n 0.3535889983177185,\n 0.3433246612548828,\n 0.3331787884235382,\n 0.32315748929977417,\n 0.3132668435573578,\n 0.3035127520561218,\n 0.29390108585357666,\n 0.2844376862049103,\n 0.27512824535369873,\n 0.26597830653190613,\n 0.25699347257614136,\n 0.248179093003273,\n 0.2395404875278473,\n 0.23108288645744324,\n 0.22281135618686676,\n 0.2147308737039566,\n 0.20684634149074554,\n 0.19916248321533203,\n 0.19168393313884735,\n 0.18441519141197205,\n 0.1773606389760971,\n 0.17052453756332397,\n 0.16391098499298096,\n 0.157523974776268,\n 0.15136736631393433,\n 0.1454448401927948,\n 0.13975998759269714,\n 0.13431622087955475,\n 0.12911681830883026,\n 0.12416492402553558,\n 0.11946351081132889,\n 0.1150154173374176,\n 0.11082331091165543,\n 0.10688973218202591,\n 0.10321703553199768,\n 0.09980744868516922,\n 0.09666301310062408,\n 0.09378562122583389,\n 0.09117701649665833,\n 0.08883877098560333,\n 0.08677228540182114,\n 0.08497880399227142,\n 0.08345941454172134,\n 0.08221502602100372,\n 0.08124639093875885,\n 0.08055409044027328,\n 0.08013854175806046\n]\n"
  },
  {
    "path": "__tests__/data/hamming512.json",
    "content": "[\n  0.07999999821186066,\n  0.08003463596105576,\n  0.08013854175806046,\n  0.08031170070171356,\n  0.08055409044027328,\n  0.08086566627025604,\n  0.08124639093875885,\n  0.08169619739055634,\n  0.08221502602100372,\n  0.08280279487371445,\n  0.08345941454172134,\n  0.08418478816747665,\n  0.08497880399227142,\n  0.0858413502573967,\n  0.08677228540182114,\n  0.087771475315094,\n  0.08883877098560333,\n  0.08997400850057602,\n  0.09117701649665833,\n  0.09244762361049652,\n  0.09378562122583389,\n  0.09519082307815552,\n  0.09666301310062408,\n  0.09820196032524109,\n  0.09980744868516922,\n  0.10147922486066818,\n  0.10321703553199768,\n  0.10502062737941742,\n  0.10688973218202591,\n  0.10882405191659927,\n  0.11082331091165543,\n  0.11288720369338989,\n  0.1150154173374176,\n  0.11720763146877289,\n  0.11946351081132889,\n  0.12178272753953934,\n  0.12416492402553558,\n  0.12660974264144897,\n  0.12911681830883026,\n  0.1316857784986496,\n  0.13431622087955475,\n  0.13700775802135468,\n  0.13975998759269714,\n  0.14257249236106873,\n  0.1454448401927948,\n  0.14837661385536194,\n  0.15136736631393433,\n  0.15441663563251495,\n  0.157523974776268,\n  0.16068892180919647,\n  0.16391098499298096,\n  0.16718968749046326,\n  0.17052453756332397,\n  0.17391502857208252,\n  0.1773606389760971,\n  0.18086087703704834,\n  0.18441519141197205,\n  0.18802306056022644,\n  0.19168393313884735,\n  0.1953972578048706,\n  0.19916248321533203,\n  0.20297902822494507,\n  0.20684634149074554,\n  0.2107638269662857,\n  0.2147308737039566,\n  0.21874693036079407,\n  0.22281135618686676,\n  0.22692354023456573,\n  0.23108288645744324,\n  0.23528873920440674,\n  0.2395404875278473,\n  0.24383749067783356,\n  0.248179093003273,\n  0.2525646388530731,\n  0.25699347257614136,\n  0.261464923620224,\n  0.26597830653190613,\n  0.2705329954624176,\n  0.27512824535369873,\n  0.2797633707523346,\n  0.2844376862049103,\n  0.28915050625801086,\n  0.29390108585357666,\n  0.29868873953819275,\n  0.3035127520561218,\n  0.3083723485469818,\n  0.3132668435573578,\n  0.3181954622268677,\n  0.32315748929977417,\n  0.3281521797180176,\n  0.3331787884235382,\n  0.338236540555954,\n  0.3433246612548828,\n  0.348442405462265,\n  0.3535889983177185,\n  0.3587636649608612,\n  0.36396563053131104,\n  0.3691940903663635,\n  0.3744482696056366,\n  0.37972739338874817,\n  0.3850306570529938,\n  0.39035725593566895,\n  0.3957063853740692,\n  0.4010772705078125,\n  0.40646904706954956,\n  0.4118809401988983,\n  0.4173121452331543,\n  0.42276179790496826,\n  0.42822912335395813,\n  0.43371325731277466,\n  0.43921342492103577,\n  0.4447287619113922,\n  0.4502584636211395,\n  0.45580166578292847,\n  0.4613575339317322,\n  0.4669252634048462,\n  0.47250398993492126,\n  0.47809287905693054,\n  0.48369109630584717,\n  0.4892977774143219,\n  0.49491211771965027,\n  0.5005332231521606,\n  0.506160318851471,\n  0.5117924809455872,\n  0.5174288749694824,\n  0.5230686664581299,\n  0.5287110209465027,\n  0.534355103969574,\n  0.5400000214576721,\n  0.5456448793411255,\n  0.5512889623641968,\n  0.5569313168525696,\n  0.562571108341217,\n  0.5682075619697571,\n  0.5738397240638733,\n  0.5794667601585388,\n  0.5850878953933716,\n  0.5907022356987,\n  0.5963088870048523,\n  0.6019071340560913,\n  0.6074960231781006,\n  0.6130747199058533,\n  0.6186424493789673,\n  0.6241983771324158,\n  0.6297415494918823,\n  0.6352712512016296,\n  0.6407865881919861,\n  0.6462867259979248,\n  0.6517708897590637,\n  0.6572381854057312,\n  0.6626878976821899,\n  0.6681190729141235,\n  0.6735309362411499,\n  0.678922712802887,\n  0.6842936277389526,\n  0.6896427273750305,\n  0.6949693560600281,\n  0.7002726197242737,\n  0.7055517435073853,\n  0.7108058929443359,\n  0.7160343527793884,\n  0.7212363481521606,\n  0.726410984992981,\n  0.7315576076507568,\n  0.7366753220558167,\n  0.7417634725570679,\n  0.7468212246894836,\n  0.7518478035926819,\n  0.7568424940109253,\n  0.7618045210838318,\n  0.7667331695556641,\n  0.77162766456604,\n  0.7764872908592224,\n  0.7813112735748291,\n  0.7860988974571228,\n  0.790849506855011,\n  0.7955623269081116,\n  0.8002366423606873,\n  0.8048717975616455,\n  0.8094670176506042,\n  0.8140217065811157,\n  0.8185350894927979,\n  0.8230065107345581,\n  0.8274353742599487,\n  0.8318209052085876,\n  0.8361625075340271,\n  0.8404595255851746,\n  0.8447112441062927,\n  0.8489171266555786,\n  0.8530764579772949,\n  0.8571886420249939,\n  0.8612530827522278,\n  0.865269124507904,\n  0.869236171245575,\n  0.8731536865234375,\n  0.8770209550857544,\n  0.8808375000953674,\n  0.8846027255058289,\n  0.8883160948753357,\n  0.8919769525527954,\n  0.8955848217010498,\n  0.8991391062736511,\n  0.9026393294334412,\n  0.9060849547386169,\n  0.9094754457473755,\n  0.9128103256225586,\n  0.9160889983177185,\n  0.9193111062049866,\n  0.9224759936332703,\n  0.9255833625793457,\n  0.9286326169967651,\n  0.9316233992576599,\n  0.934555172920227,\n  0.9374275207519531,\n  0.9402400255203247,\n  0.9429922699928284,\n  0.9456837773323059,\n  0.9483142495155334,\n  0.950883150100708,\n  0.9533902406692505,\n  0.9558351039886475,\n  0.9582172632217407,\n  0.9605364799499512,\n  0.9627923965454102,\n  0.9649845957756042,\n  0.9671127796173096,\n  0.969176709651947,\n  0.9711759686470032,\n  0.9731102585792542,\n  0.9749793410301208,\n  0.9767829775810242,\n  0.9785207509994507,\n  0.9801925420761108,\n  0.9817980527877808,\n  0.9833369851112366,\n  0.984809160232544,\n  0.9862143993377686,\n  0.9875524044036865,\n  0.9888229966163635,\n  0.9900259971618652,\n  0.9911612272262573,\n  0.9922285079956055,\n  0.9932277202606201,\n  0.9941586256027222,\n  0.9950212240219116,\n  0.9958152174949646,\n  0.9965406060218811,\n  0.9971972107887268,\n  0.9977849721908569,\n  0.9983038306236267,\n  0.9987536072731018,\n  0.9991343021392822,\n  0.999445915222168,\n  0.9996882677078247,\n  0.999861478805542,\n  0.9999653697013855,\n  1,\n  0.9999653697013855,\n  0.999861478805542,\n  0.9996882677078247,\n  0.999445915222168,\n  0.9991343021392822,\n  0.9987536072731018,\n  0.9983038306236267,\n  0.9977849721908569,\n  0.9971972107887268,\n  0.9965406060218811,\n  0.9958152174949646,\n  0.9950212240219116,\n  0.9941586256027222,\n  0.9932277202606201,\n  0.9922285079956055,\n  0.9911612272262573,\n  0.9900259971618652,\n  0.9888229966163635,\n  0.9875524044036865,\n  0.9862143993377686,\n  0.984809160232544,\n  0.9833369851112366,\n  0.9817980527877808,\n  0.9801925420761108,\n  0.9785207509994507,\n  0.9767829775810242,\n  0.9749793410301208,\n  0.9731102585792542,\n  0.9711759686470032,\n  0.969176709651947,\n  0.9671127796173096,\n  0.9649845957756042,\n  0.9627923965454102,\n  0.9605364799499512,\n  0.9582172632217407,\n  0.9558351039886475,\n  0.9533902406692505,\n  0.950883150100708,\n  0.9483142495155334,\n  0.9456837773323059,\n  0.9429922699928284,\n  0.9402400255203247,\n  0.9374275207519531,\n  0.934555172920227,\n  0.9316233992576599,\n  0.9286326169967651,\n  0.9255833625793457,\n  0.9224759936332703,\n  0.9193111062049866,\n  0.9160889983177185,\n  0.9128103256225586,\n  0.9094754457473755,\n  0.9060849547386169,\n  0.9026393294334412,\n  0.8991391062736511,\n  0.8955848217010498,\n  0.8919769525527954,\n  0.8883160948753357,\n  0.8846027255058289,\n  0.8808375000953674,\n  0.8770209550857544,\n  0.8731536865234375,\n  0.869236171245575,\n  0.865269124507904,\n  0.8612530827522278,\n  0.8571886420249939,\n  0.8530764579772949,\n  0.8489171266555786,\n  0.8447112441062927,\n  0.8404595255851746,\n  0.8361625075340271,\n  0.8318209052085876,\n  0.8274353742599487,\n  0.8230065107345581,\n  0.8185350894927979,\n  0.8140217065811157,\n  0.8094670176506042,\n  0.8048717975616455,\n  0.8002366423606873,\n  0.7955623269081116,\n  0.790849506855011,\n  0.7860988974571228,\n  0.7813112735748291,\n  0.7764872908592224,\n  0.77162766456604,\n  0.7667331695556641,\n  0.7618045210838318,\n  0.7568424940109253,\n  0.7518478035926819,\n  0.7468212246894836,\n  0.7417634725570679,\n  0.7366753220558167,\n  0.7315576076507568,\n  0.726410984992981,\n  0.7212363481521606,\n  0.7160343527793884,\n  0.7108058929443359,\n  0.7055517435073853,\n  0.7002726197242737,\n  0.6949693560600281,\n  0.6896427273750305,\n  0.6842936277389526,\n  0.678922712802887,\n  0.6735309362411499,\n  0.6681190729141235,\n  0.6626878976821899,\n  0.6572381854057312,\n  0.6517708897590637,\n  0.6462867259979248,\n  0.6407865881919861,\n  0.6352712512016296,\n  0.6297415494918823,\n  0.6241983771324158,\n  0.6186424493789673,\n  0.6130747199058533,\n  0.6074960231781006,\n  0.6019071340560913,\n  0.5963088870048523,\n  0.5907022356987,\n  0.5850878953933716,\n  0.5794667601585388,\n  0.5738397240638733,\n  0.5682075619697571,\n  0.562571108341217,\n  0.5569313168525696,\n  0.5512889623641968,\n  0.5456448793411255,\n  0.5400000214576721,\n  0.534355103969574,\n  0.5287110209465027,\n  0.5230686664581299,\n  0.5174288749694824,\n  0.5117924809455872,\n  0.506160318851471,\n  0.5005332231521606,\n  0.49491211771965027,\n  0.4892977774143219,\n  0.48369109630584717,\n  0.47809287905693054,\n  0.47250398993492126,\n  0.4669252634048462,\n  0.4613575339317322,\n  0.45580166578292847,\n  0.4502584636211395,\n  0.4447287619113922,\n  0.43921342492103577,\n  0.43371325731277466,\n  0.42822912335395813,\n  0.42276179790496826,\n  0.4173121452331543,\n  0.4118809401988983,\n  0.40646904706954956,\n  0.4010772705078125,\n  0.3957063853740692,\n  0.39035725593566895,\n  0.3850306570529938,\n  0.37972739338874817,\n  0.3744482696056366,\n  0.3691940903663635,\n  0.36396563053131104,\n  0.3587636649608612,\n  0.3535889983177185,\n  0.348442405462265,\n  0.3433246612548828,\n  0.338236540555954,\n  0.3331787884235382,\n  0.3281521797180176,\n  0.32315748929977417,\n  0.3181954622268677,\n  0.3132668435573578,\n  0.3083723485469818,\n  0.3035127520561218,\n  0.29868873953819275,\n  0.29390108585357666,\n  0.28915050625801086,\n  0.2844376862049103,\n  0.2797633707523346,\n  0.27512824535369873,\n  0.2705329954624176,\n  0.26597830653190613,\n  0.261464923620224,\n  0.25699347257614136,\n  0.2525646388530731,\n  0.248179093003273,\n  0.24383749067783356,\n  0.2395404875278473,\n  0.23528873920440674,\n  0.23108288645744324,\n  0.22692354023456573,\n  0.22281135618686676,\n  0.21874693036079407,\n  0.2147308737039566,\n  0.2107638269662857,\n  0.20684634149074554,\n  0.20297902822494507,\n  0.19916248321533203,\n  0.1953972578048706,\n  0.19168393313884735,\n  0.18802306056022644,\n  0.18441519141197205,\n  0.18086087703704834,\n  0.1773606389760971,\n  0.17391502857208252,\n  0.17052453756332397,\n  0.16718968749046326,\n  0.16391098499298096,\n  0.16068892180919647,\n  0.157523974776268,\n  0.15441663563251495,\n  0.15136736631393433,\n  0.14837661385536194,\n  0.1454448401927948,\n  0.14257249236106873,\n  0.13975998759269714,\n  0.13700775802135468,\n  0.13431622087955475,\n  0.1316857784986496,\n  0.12911681830883026,\n  0.12660974264144897,\n  0.12416492402553558,\n  0.12178272753953934,\n  0.11946351081132889,\n  0.11720763146877289,\n  0.1150154173374176,\n  0.11288720369338989,\n  0.11082331091165543,\n  0.10882405191659927,\n  0.10688973218202591,\n  0.10502062737941742,\n  0.10321703553199768,\n  0.10147922486066818,\n  0.09980744868516922,\n  0.09820196032524109,\n  0.09666301310062408,\n  0.09519082307815552,\n  0.09378562122583389,\n  0.09244762361049652,\n  0.09117701649665833,\n  0.08997400850057602,\n  0.08883877098560333,\n  0.087771475315094,\n  0.08677228540182114,\n  0.0858413502573967,\n  0.08497880399227142,\n  0.08418478816747665,\n  0.08345941454172134,\n  0.08280279487371445,\n  0.08221502602100372,\n  0.08169619739055634,\n  0.08124639093875885,\n  0.08086566627025604,\n  0.08055409044027328,\n  0.08031170070171356,\n  0.08013854175806046,\n  0.08003463596105576\n]\n"
  },
  {
    "path": "__tests__/data/hanning1024.json",
    "content": "[\n  0,\n  9.430768841411918e-06,\n  3.7722722481703386e-05,\n  8.487478771712631e-05,\n  0.00015088518557604402,\n  0.0002357514458708465,\n  0.0003394703380763531,\n  0.0004620379477273673,\n  0.0006034497055225074,\n  0.000763700227253139,\n  0.0009427834302186966,\n  0.001140692620538175,\n  0.0013574203476309776,\n  0.0015929584624245763,\n  0.0018472978845238686,\n  0.0021204291842877865,\n  0.002412342233583331,\n  0.0027230256237089634,\n  0.0030524679459631443,\n  0.0034006566274911165,\n  0.003767578396946192,\n  0.0041532195173203945,\n  0.004557565785944462,\n  0.0049806018359959126,\n  0.005422311369329691,\n  0.005882677622139454,\n  0.006361683830618858,\n  0.006859311368316412,\n  0.0073755416087806225,\n  0.007910354994237423,\n  0.008463731966912746,\n  0.009035651572048664,\n  0.009626091457903385,\n  0.010235029272735119,\n  0.010862442664802074,\n  0.011508308351039886,\n  0.01217260118573904,\n  0.012855296023190022,\n  0.01355636864900589,\n  0.014275790192186832,\n  0.015013535507023335,\n  0.01576957479119301,\n  0.016543881967663765,\n  0.017336426302790642,\n  0.01814717799425125,\n  0.018976107239723206,\n  0.01982318051159382,\n  0.020688369870185852,\n  0.02157163806259632,\n  0.022472955286502838,\n  0.023392286151647568,\n  0.024329597130417824,\n  0.02528485096991062,\n  0.026258012279868126,\n  0.027249043807387352,\n  0.028257910162210464,\n  0.02928457222878933,\n  0.030328990891575813,\n  0.03139112517237663,\n  0.0324709415435791,\n  0.03356838971376419,\n  0.034683436155319214,\n  0.03581603243947029,\n  0.03696614131331444,\n  0.03813371807336807,\n  0.039318718016147614,\n  0.04052109271287918,\n  0.04174080491065979,\n  0.04297780245542526,\n  0.04423204064369202,\n  0.045503467321395874,\n  0.04679204523563385,\n  0.04809771478176117,\n  0.04942043498158455,\n  0.05076014995574951,\n  0.052116815000772476,\n  0.053490374237298965,\n  0.0548807755112648,\n  0.056287966668605804,\n  0.057711899280548096,\n  0.0591525137424469,\n  0.060609761625528336,\n  0.06208358332514763,\n  0.0635739266872406,\n  0.06508072465658188,\n  0.06660393625497818,\n  0.06814350187778473,\n  0.06969934701919556,\n  0.07127143442630768,\n  0.07285968959331512,\n  0.07446406036615372,\n  0.07608447968959808,\n  0.07772088795900345,\n  0.07937323302030563,\n  0.08104144036769867,\n  0.08272545784711838,\n  0.08442521095275879,\n  0.08614064753055573,\n  0.08787168562412262,\n  0.08961828052997589,\n  0.09138035029172897,\n  0.09315783530473709,\n  0.09495066851377487,\n  0.09675878286361694,\n  0.09858211129903793,\n  0.10042057186365128,\n  0.10227411240339279,\n  0.10414265841245651,\n  0.10602613538503647,\n  0.10792447626590729,\n  0.109837606549263,\n  0.11176545172929764,\n  0.11370794475078583,\n  0.1156650111079216,\n  0.11763656884431839,\n  0.11962255835533142,\n  0.12162289768457413,\n  0.12363750487565994,\n  0.1256663054227829,\n  0.12770923972129822,\n  0.12976621091365814,\n  0.1318371444940567,\n  0.13392198085784912,\n  0.13602061569690704,\n  0.1381329745054245,\n  0.1402589976787567,\n  0.14239858090877533,\n  0.14455166459083557,\n  0.14671814441680908,\n  0.1488979607820511,\n  0.15109102427959442,\n  0.15329724550247192,\n  0.15551653504371643,\n  0.15774883329868317,\n  0.15999403595924377,\n  0.16225206851959229,\n  0.16452284157276154,\n  0.16680626571178436,\n  0.1691022664308548,\n  0.17141073942184448,\n  0.17373161017894745,\n  0.17606478929519653,\n  0.17841020226478577,\n  0.1807677298784256,\n  0.18313729763031006,\n  0.18551883101463318,\n  0.1879122257232666,\n  0.19031739234924316,\n  0.1927342265844345,\n  0.19516266882419586,\n  0.19760259985923767,\n  0.20005394518375397,\n  0.2025166153907776,\n  0.20499049127101898,\n  0.20747549831867218,\n  0.20997154712677002,\n  0.21247853338718414,\n  0.2149963676929474,\n  0.2175249457359314,\n  0.220064178109169,\n  0.22261397540569305,\n  0.22517424821853638,\n  0.22774487733840942,\n  0.23032577335834503,\n  0.23291684687137604,\n  0.23551799356937408,\n  0.238129124045372,\n  0.24075011909008026,\n  0.24338090419769287,\n  0.24602137506008148,\n  0.24867141246795654,\n  0.2513309419155121,\n  0.25399985909461975,\n  0.25667804479599,\n  0.25936540961265564,\n  0.26206183433532715,\n  0.26476725935935974,\n  0.26748156547546387,\n  0.2702046036720276,\n  0.2729363441467285,\n  0.2756766378879547,\n  0.278425395488739,\n  0.28118252754211426,\n  0.2839478850364685,\n  0.286721408367157,\n  0.28950297832489014,\n  0.2922925055027008,\n  0.29508984088897705,\n  0.2978949248790741,\n  0.30070760846138,\n  0.30352783203125,\n  0.30635544657707214,\n  0.30919039249420166,\n  0.3120325207710266,\n  0.31488174200057983,\n  0.3177379369735718,\n  0.3206010162830353,\n  0.3234708607196808,\n  0.32634738087654114,\n  0.3292304277420044,\n  0.3321199417114258,\n  0.33501577377319336,\n  0.3379178047180176,\n  0.34082597494125366,\n  0.34374016523361206,\n  0.34666022658348083,\n  0.3495860695838928,\n  0.35251760482788086,\n  0.3554547131061554,\n  0.3583972454071045,\n  0.3613451421260834,\n  0.3642982542514801,\n  0.3672564923763275,\n  0.37021973729133606,\n  0.3731878697872162,\n  0.37616080045700073,\n  0.37913838028907776,\n  0.3821205198764801,\n  0.3851071298122406,\n  0.3880980610847473,\n  0.3910932242870331,\n  0.39409247040748596,\n  0.3970957398414612,\n  0.4001028835773468,\n  0.40311378240585327,\n  0.4061283469200134,\n  0.4091464579105377,\n  0.4121679961681366,\n  0.4151928424835205,\n  0.4182208776473999,\n  0.4212520122528076,\n  0.4242860972881317,\n  0.4273230731487274,\n  0.4303627610206604,\n  0.4334051012992859,\n  0.43644991517066956,\n  0.439497172832489,\n  0.44254666566848755,\n  0.4455983638763428,\n  0.44865208864212036,\n  0.45170778036117554,\n  0.454765260219574,\n  0.4578244686126709,\n  0.46088525652885437,\n  0.4639475345611572,\n  0.46701115369796753,\n  0.4700760245323181,\n  0.47314202785491943,\n  0.47620904445648193,\n  0.47927695512771606,\n  0.4823456406593323,\n  0.4854150116443634,\n  0.4884849190711975,\n  0.49155527353286743,\n  0.49462592601776123,\n  0.49769678711891174,\n  0.5007677674293518,\n  0.5038386583328247,\n  0.5069094300270081,\n  0.5099799633026123,\n  0.5130500793457031,\n  0.5161197781562805,\n  0.5191887617111206,\n  0.5222570896148682,\n  0.5253245830535889,\n  0.5283911228179932,\n  0.5314565300941467,\n  0.5345208048820496,\n  0.5375837683677673,\n  0.5406453013420105,\n  0.5437053442001343,\n  0.5467637181282043,\n  0.5498203039169312,\n  0.5528750419616699,\n  0.5559277534484863,\n  0.5589783787727356,\n  0.5620267391204834,\n  0.565072774887085,\n  0.5681163668632507,\n  0.5711573958396912,\n  0.5741957426071167,\n  0.5772312879562378,\n  0.5802639126777649,\n  0.5832935571670532,\n  0.5863199830055237,\n  0.5893431901931763,\n  0.5923629999160767,\n  0.5953793525695801,\n  0.598392128944397,\n  0.601401150226593,\n  0.6044063568115234,\n  0.6074076294898987,\n  0.6104048490524292,\n  0.6133979558944702,\n  0.6163867115974426,\n  0.6193711161613464,\n  0.6223509907722473,\n  0.6253262758255005,\n  0.6282967925071716,\n  0.6312625408172607,\n  0.6342232823371887,\n  0.6371789574623108,\n  0.6401294469833374,\n  0.6430746912956238,\n  0.6460145115852356,\n  0.6489488482475281,\n  0.6518775820732117,\n  0.654800534248352,\n  0.6577176451683044,\n  0.6606288552284241,\n  0.6635339856147766,\n  0.6664329171180725,\n  0.669325590133667,\n  0.6722118854522705,\n  0.6750916838645935,\n  0.6779648661613464,\n  0.6808313727378845,\n  0.6836910247802734,\n  0.6865437626838684,\n  0.6893894672393799,\n  0.6922279596328735,\n  0.6950592994689941,\n  0.6978831887245178,\n  0.7006996870040894,\n  0.7035085558891296,\n  0.7063097953796387,\n  0.7091032266616821,\n  0.7118887901306152,\n  0.7146663665771484,\n  0.7174358367919922,\n  0.7201970815658569,\n  0.7229500412940979,\n  0.7256945967674255,\n  0.7284305691719055,\n  0.7311580181121826,\n  0.7338767051696777,\n  0.7365865707397461,\n  0.7392874956130981,\n  0.7419794201850891,\n  0.7446622252464294,\n  0.7473357915878296,\n  0.75,\n  0.7526547908782959,\n  0.7553000450134277,\n  0.7579357028007507,\n  0.7605615854263306,\n  0.7631776928901672,\n  0.7657838463783264,\n  0.7683799266815186,\n  0.7709659337997437,\n  0.7735417485237122,\n  0.7761071920394897,\n  0.7786622047424316,\n  0.7812067866325378,\n  0.7837406992912292,\n  0.7862638831138611,\n  0.7887763381004333,\n  0.7912778258323669,\n  0.7937684059143066,\n  0.7962478399276733,\n  0.798716127872467,\n  0.8011731505393982,\n  0.8036187887191772,\n  0.8060529828071594,\n  0.8084756731987,\n  0.8108866810798645,\n  0.8132859468460083,\n  0.8156734108924866,\n  0.8180489540100098,\n  0.8204125761985779,\n  0.8227640390396118,\n  0.8251033425331116,\n  0.8274303674697876,\n  0.8297450542449951,\n  0.8320472836494446,\n  0.8343369960784912,\n  0.8366141319274902,\n  0.8388785719871521,\n  0.8411301970481873,\n  0.8433689475059509,\n  0.8455947637557983,\n  0.8478075265884399,\n  0.850007176399231,\n  0.8521935939788818,\n  0.8543667793273926,\n  0.8565265536308289,\n  0.8586729168891907,\n  0.8608056902885437,\n  0.8629249334335327,\n  0.8650304079055786,\n  0.8671221733093262,\n  0.8692000508308411,\n  0.8712640404701233,\n  0.8733139634132385,\n  0.8753498792648315,\n  0.8773715496063232,\n  0.8793790340423584,\n  0.8813722133636475,\n  0.8833510279655457,\n  0.8853153586387634,\n  0.887265145778656,\n  0.8892003297805786,\n  0.8911207914352417,\n  0.8930265307426453,\n  0.8949174880981445,\n  0.8967934846878052,\n  0.8986545205116272,\n  0.9005005359649658,\n  0.9023314714431763,\n  0.904147207736969,\n  0.9059476852416992,\n  0.9077328443527222,\n  0.9095026254653931,\n  0.9112569689750671,\n  0.9129957556724548,\n  0.9147190451622009,\n  0.9164265990257263,\n  0.9181185364723206,\n  0.9197946190834045,\n  0.921454906463623,\n  0.9230993390083313,\n  0.924727737903595,\n  0.9263401627540588,\n  0.9279364347457886,\n  0.929516613483429,\n  0.9310805797576904,\n  0.932628333568573,\n  0.9341596961021423,\n  0.9356747269630432,\n  0.9371733069419861,\n  0.9386553764343262,\n  0.9401209354400635,\n  0.9415698647499084,\n  0.9430021643638611,\n  0.9444177150726318,\n  0.9458165168762207,\n  0.9471985101699829,\n  0.9485636353492737,\n  0.9499118328094482,\n  0.9512430429458618,\n  0.9525572657585144,\n  0.9538543820381165,\n  0.955134391784668,\n  0.9563972353935242,\n  0.9576428532600403,\n  0.9588711857795715,\n  0.9600822925567627,\n  0.9612759351730347,\n  0.962452232837677,\n  0.9636111259460449,\n  0.9647524356842041,\n  0.9658762812614441,\n  0.9669825434684753,\n  0.9680711627006531,\n  0.9691421389579773,\n  0.9701954126358032,\n  0.9712309837341309,\n  0.9722487330436707,\n  0.9732487201690674,\n  0.9742308259010315,\n  0.9751949906349182,\n  0.9761412739753723,\n  0.977069616317749,\n  0.9779799580574036,\n  0.9788722395896912,\n  0.9797464609146118,\n  0.9806026220321655,\n  0.9814406037330627,\n  0.9822604656219482,\n  0.9830621480941772,\n  0.9838455319404602,\n  0.9846107363700867,\n  0.9853576421737671,\n  0.9860861897468567,\n  0.9867964386940002,\n  0.987488329410553,\n  0.9881618618965149,\n  0.9888169169425964,\n  0.9894535541534424,\n  0.9900717735290527,\n  0.9906714558601379,\n  0.991252601146698,\n  0.9918152689933777,\n  0.9923593997955322,\n  0.9928848743438721,\n  0.9933918118476868,\n  0.9938801527023315,\n  0.9943498373031616,\n  0.994800865650177,\n  0.9952332377433777,\n  0.9956469535827637,\n  0.9960419535636902,\n  0.9964182376861572,\n  0.9967758059501648,\n  0.9971145987510681,\n  0.997434675693512,\n  0.9977359771728516,\n  0.9980185031890869,\n  0.9982821941375732,\n  0.9985271692276001,\n  0.9987533092498779,\n  0.9989606142044067,\n  0.9991490840911865,\n  0.9993187785148621,\n  0.9994696378707886,\n  0.9996016025543213,\n  0.999714732170105,\n  0.9998090267181396,\n  0.9998844861984253,\n  0.9999410510063171,\n  0.99997878074646,\n  0.999997615814209,\n  0.999997615814209,\n  0.99997878074646,\n  0.9999410510063171,\n  0.9998844861984253,\n  0.9998090267181396,\n  0.999714732170105,\n  0.9996016025543213,\n  0.9994696378707886,\n  0.9993187785148621,\n  0.9991490840911865,\n  0.9989606142044067,\n  0.9987533092498779,\n  0.9985271692276001,\n  0.9982821941375732,\n  0.9980185031890869,\n  0.9977359771728516,\n  0.997434675693512,\n  0.9971145987510681,\n  0.9967758059501648,\n  0.9964182376861572,\n  0.9960419535636902,\n  0.9956469535827637,\n  0.9952332377433777,\n  0.994800865650177,\n  0.9943498373031616,\n  0.9938801527023315,\n  0.9933918118476868,\n  0.9928848743438721,\n  0.9923593997955322,\n  0.9918152689933777,\n  0.991252601146698,\n  0.9906714558601379,\n  0.9900717735290527,\n  0.9894535541534424,\n  0.9888169169425964,\n  0.9881618618965149,\n  0.987488329410553,\n  0.9867964386940002,\n  0.9860861897468567,\n  0.9853576421737671,\n  0.9846107363700867,\n  0.9838455319404602,\n  0.9830621480941772,\n  0.9822604656219482,\n  0.9814406037330627,\n  0.9806026220321655,\n  0.9797464609146118,\n  0.9788722395896912,\n  0.9779799580574036,\n  0.977069616317749,\n  0.9761412739753723,\n  0.9751949906349182,\n  0.9742308259010315,\n  0.9732487201690674,\n  0.9722487330436707,\n  0.9712309837341309,\n  0.9701954126358032,\n  0.9691421389579773,\n  0.9680711627006531,\n  0.9669825434684753,\n  0.9658762812614441,\n  0.9647524356842041,\n  0.9636111259460449,\n  0.962452232837677,\n  0.9612759351730347,\n  0.9600822925567627,\n  0.9588711857795715,\n  0.9576428532600403,\n  0.9563972353935242,\n  0.955134391784668,\n  0.9538543820381165,\n  0.9525572657585144,\n  0.9512430429458618,\n  0.9499118328094482,\n  0.9485636353492737,\n  0.9471985101699829,\n  0.9458165168762207,\n  0.9444177150726318,\n  0.9430021643638611,\n  0.9415698647499084,\n  0.9401209354400635,\n  0.9386553764343262,\n  0.9371733069419861,\n  0.9356747269630432,\n  0.9341596961021423,\n  0.932628333568573,\n  0.9310805797576904,\n  0.929516613483429,\n  0.9279364347457886,\n  0.9263401627540588,\n  0.924727737903595,\n  0.9230993390083313,\n  0.921454906463623,\n  0.9197946190834045,\n  0.9181185364723206,\n  0.9164265990257263,\n  0.9147190451622009,\n  0.9129957556724548,\n  0.9112569689750671,\n  0.9095026254653931,\n  0.9077328443527222,\n  0.9059476852416992,\n  0.904147207736969,\n  0.9023314714431763,\n  0.9005005359649658,\n  0.8986545205116272,\n  0.8967934846878052,\n  0.8949174880981445,\n  0.8930265307426453,\n  0.8911207914352417,\n  0.8892003297805786,\n  0.887265145778656,\n  0.8853153586387634,\n  0.8833510279655457,\n  0.8813722133636475,\n  0.8793790340423584,\n  0.8773715496063232,\n  0.8753498792648315,\n  0.8733139634132385,\n  0.8712640404701233,\n  0.8692000508308411,\n  0.8671221733093262,\n  0.8650304079055786,\n  0.8629249334335327,\n  0.8608056902885437,\n  0.8586729168891907,\n  0.8565265536308289,\n  0.8543667793273926,\n  0.8521935939788818,\n  0.850007176399231,\n  0.8478075265884399,\n  0.8455947637557983,\n  0.8433689475059509,\n  0.8411301970481873,\n  0.8388785719871521,\n  0.8366141319274902,\n  0.8343369960784912,\n  0.8320472836494446,\n  0.8297450542449951,\n  0.8274303674697876,\n  0.8251033425331116,\n  0.8227640390396118,\n  0.8204125761985779,\n  0.8180489540100098,\n  0.8156734108924866,\n  0.8132859468460083,\n  0.8108866810798645,\n  0.8084756731987,\n  0.8060529828071594,\n  0.8036187887191772,\n  0.8011731505393982,\n  0.798716127872467,\n  0.7962478399276733,\n  0.7937684059143066,\n  0.7912778258323669,\n  0.7887763381004333,\n  0.7862638831138611,\n  0.7837406992912292,\n  0.7812067866325378,\n  0.7786622047424316,\n  0.7761071920394897,\n  0.7735417485237122,\n  0.7709659337997437,\n  0.7683799266815186,\n  0.7657838463783264,\n  0.7631776928901672,\n  0.7605615854263306,\n  0.7579357028007507,\n  0.7553000450134277,\n  0.7526547908782959,\n  0.75,\n  0.7473357915878296,\n  0.7446622252464294,\n  0.7419794201850891,\n  0.7392874956130981,\n  0.7365865707397461,\n  0.7338767051696777,\n  0.7311580181121826,\n  0.7284305691719055,\n  0.7256945967674255,\n  0.7229500412940979,\n  0.7201970815658569,\n  0.7174358367919922,\n  0.7146663665771484,\n  0.7118887901306152,\n  0.7091032266616821,\n  0.7063097953796387,\n  0.7035085558891296,\n  0.7006996870040894,\n  0.6978831887245178,\n  0.6950592994689941,\n  0.6922279596328735,\n  0.6893894672393799,\n  0.6865437626838684,\n  0.6836910247802734,\n  0.6808313727378845,\n  0.6779648661613464,\n  0.6750916838645935,\n  0.6722118854522705,\n  0.669325590133667,\n  0.6664329171180725,\n  0.6635339856147766,\n  0.6606288552284241,\n  0.6577176451683044,\n  0.654800534248352,\n  0.6518775820732117,\n  0.6489488482475281,\n  0.6460145115852356,\n  0.6430746912956238,\n  0.6401294469833374,\n  0.6371789574623108,\n  0.6342232823371887,\n  0.6312625408172607,\n  0.6282967925071716,\n  0.6253262758255005,\n  0.6223509907722473,\n  0.6193711161613464,\n  0.6163867115974426,\n  0.6133979558944702,\n  0.6104048490524292,\n  0.6074076294898987,\n  0.6044063568115234,\n  0.601401150226593,\n  0.598392128944397,\n  0.5953793525695801,\n  0.5923629999160767,\n  0.5893431901931763,\n  0.5863199830055237,\n  0.5832935571670532,\n  0.5802639126777649,\n  0.5772312879562378,\n  0.5741957426071167,\n  0.5711573958396912,\n  0.5681163668632507,\n  0.565072774887085,\n  0.5620267391204834,\n  0.5589783787727356,\n  0.5559277534484863,\n  0.5528750419616699,\n  0.5498203039169312,\n  0.5467637181282043,\n  0.5437053442001343,\n  0.5406453013420105,\n  0.5375837683677673,\n  0.5345208048820496,\n  0.5314565300941467,\n  0.5283911228179932,\n  0.5253245830535889,\n  0.5222570896148682,\n  0.5191887617111206,\n  0.5161197781562805,\n  0.5130500793457031,\n  0.5099799633026123,\n  0.5069094300270081,\n  0.5038386583328247,\n  0.5007677674293518,\n  0.49769678711891174,\n  0.49462592601776123,\n  0.49155527353286743,\n  0.4884849190711975,\n  0.4854150116443634,\n  0.4823456406593323,\n  0.47927695512771606,\n  0.47620904445648193,\n  0.47314202785491943,\n  0.4700760245323181,\n  0.46701115369796753,\n  0.4639475345611572,\n  0.46088525652885437,\n  0.4578244686126709,\n  0.454765260219574,\n  0.45170778036117554,\n  0.44865208864212036,\n  0.4455983638763428,\n  0.44254666566848755,\n  0.439497172832489,\n  0.43644991517066956,\n  0.4334051012992859,\n  0.4303627610206604,\n  0.4273230731487274,\n  0.4242860972881317,\n  0.4212520122528076,\n  0.4182208776473999,\n  0.4151928424835205,\n  0.4121679961681366,\n  0.4091464579105377,\n  0.4061283469200134,\n  0.40311378240585327,\n  0.4001028835773468,\n  0.3970957398414612,\n  0.39409247040748596,\n  0.3910932242870331,\n  0.3880980610847473,\n  0.3851071298122406,\n  0.3821205198764801,\n  0.37913838028907776,\n  0.37616080045700073,\n  0.3731878697872162,\n  0.37021973729133606,\n  0.3672564923763275,\n  0.3642982542514801,\n  0.3613451421260834,\n  0.3583972454071045,\n  0.3554547131061554,\n  0.35251760482788086,\n  0.3495860695838928,\n  0.34666022658348083,\n  0.34374016523361206,\n  0.34082597494125366,\n  0.3379178047180176,\n  0.33501577377319336,\n  0.3321199417114258,\n  0.3292304277420044,\n  0.32634738087654114,\n  0.3234708607196808,\n  0.3206010162830353,\n  0.3177379369735718,\n  0.31488174200057983,\n  0.3120325207710266,\n  0.30919039249420166,\n  0.30635544657707214,\n  0.30352783203125,\n  0.30070760846138,\n  0.2978949248790741,\n  0.29508984088897705,\n  0.2922925055027008,\n  0.28950297832489014,\n  0.286721408367157,\n  0.2839478850364685,\n  0.28118252754211426,\n  0.278425395488739,\n  0.2756766378879547,\n  0.2729363441467285,\n  0.2702046036720276,\n  0.26748156547546387,\n  0.26476725935935974,\n  0.26206183433532715,\n  0.25936540961265564,\n  0.25667804479599,\n  0.25399985909461975,\n  0.2513309419155121,\n  0.24867141246795654,\n  0.24602137506008148,\n  0.24338090419769287,\n  0.24075011909008026,\n  0.238129124045372,\n  0.23551799356937408,\n  0.23291684687137604,\n  0.23032577335834503,\n  0.22774487733840942,\n  0.22517424821853638,\n  0.22261397540569305,\n  0.220064178109169,\n  0.2175249457359314,\n  0.2149963676929474,\n  0.21247853338718414,\n  0.20997154712677002,\n  0.20747549831867218,\n  0.20499049127101898,\n  0.2025166153907776,\n  0.20005394518375397,\n  0.19760259985923767,\n  0.19516266882419586,\n  0.1927342265844345,\n  0.19031739234924316,\n  0.1879122257232666,\n  0.18551883101463318,\n  0.18313729763031006,\n  0.1807677298784256,\n  0.17841020226478577,\n  0.17606478929519653,\n  0.17373161017894745,\n  0.17141073942184448,\n  0.1691022664308548,\n  0.16680626571178436,\n  0.16452284157276154,\n  0.16225206851959229,\n  0.15999403595924377,\n  0.15774883329868317,\n  0.15551653504371643,\n  0.15329724550247192,\n  0.15109102427959442,\n  0.1488979607820511,\n  0.14671814441680908,\n  0.14455166459083557,\n  0.14239858090877533,\n  0.1402589976787567,\n  0.1381329745054245,\n  0.13602061569690704,\n  0.13392198085784912,\n  0.1318371444940567,\n  0.12976621091365814,\n  0.12770923972129822,\n  0.1256663054227829,\n  0.12363750487565994,\n  0.12162289768457413,\n  0.11962255835533142,\n  0.11763656884431839,\n  0.1156650111079216,\n  0.11370794475078583,\n  0.11176545172929764,\n  0.109837606549263,\n  0.10792447626590729,\n  0.10602613538503647,\n  0.10414265841245651,\n  0.10227411240339279,\n  0.10042057186365128,\n  0.09858211129903793,\n  0.09675878286361694,\n  0.09495066851377487,\n  0.09315783530473709,\n  0.09138035029172897,\n  0.08961828052997589,\n  0.08787168562412262,\n  0.08614064753055573,\n  0.08442521095275879,\n  0.08272545784711838,\n  0.08104144036769867,\n  0.07937323302030563,\n  0.07772088795900345,\n  0.07608447968959808,\n  0.07446406036615372,\n  0.07285968959331512,\n  0.07127143442630768,\n  0.06969934701919556,\n  0.06814350187778473,\n  0.06660393625497818,\n  0.06508072465658188,\n  0.0635739266872406,\n  0.06208358332514763,\n  0.060609761625528336,\n  0.0591525137424469,\n  0.057711899280548096,\n  0.056287966668605804,\n  0.0548807755112648,\n  0.053490374237298965,\n  0.052116815000772476,\n  0.05076014995574951,\n  0.04942043498158455,\n  0.04809771478176117,\n  0.04679204523563385,\n  0.045503467321395874,\n  0.04423204064369202,\n  0.04297780245542526,\n  0.04174080491065979,\n  0.04052109271287918,\n  0.039318718016147614,\n  0.03813371807336807,\n  0.03696614131331444,\n  0.03581603243947029,\n  0.034683436155319214,\n  0.03356838971376419,\n  0.0324709415435791,\n  0.03139112517237663,\n  0.030328990891575813,\n  0.02928457222878933,\n  0.028257910162210464,\n  0.027249043807387352,\n  0.026258012279868126,\n  0.02528485096991062,\n  0.024329597130417824,\n  0.023392286151647568,\n  0.022472955286502838,\n  0.02157163806259632,\n  0.020688369870185852,\n  0.01982318051159382,\n  0.018976107239723206,\n  0.01814717799425125,\n  0.017336426302790642,\n  0.016543881967663765,\n  0.01576957479119301,\n  0.015013535507023335,\n  0.014275790192186832,\n  0.01355636864900589,\n  0.012855296023190022,\n  0.01217260118573904,\n  0.011508308351039886,\n  0.010862442664802074,\n  0.010235029272735119,\n  0.009626091457903385,\n  0.009035651572048664,\n  0.008463731966912746,\n  0.007910354994237423,\n  0.0073755416087806225,\n  0.006859311368316412,\n  0.006361683830618858,\n  0.005882677622139454,\n  0.005422311369329691,\n  0.0049806018359959126,\n  0.004557565785944462,\n  0.0041532195173203945,\n  0.003767578396946192,\n  0.0034006566274911165,\n  0.0030524679459631443,\n  0.0027230256237089634,\n  0.002412342233583331,\n  0.0021204291842877865,\n  0.0018472978845238686,\n  0.0015929584624245763,\n  0.0013574203476309776,\n  0.001140692620538175,\n  0.0009427834302186966,\n  0.000763700227253139,\n  0.0006034497055225074,\n  0.0004620379477273673,\n  0.0003394703380763531,\n  0.0002357514458708465,\n  0.00015088518557604402,\n  8.487478771712631e-05,\n  3.7722722481703386e-05,\n  9.430768841411918e-06,\n  0\n]\n"
  },
  {
    "path": "__tests__/data/hanning128.json",
    "content": "[\n  0,\n  0.0006117919110693038,\n  0.002445670310407877,\n  0.005497147794812918,\n  0.00975875649601221,\n  0.015220067463815212,\n  0.021867716684937477,\n  0.029685435816645622,\n  0.03865409269928932,\n  0.04875174164772034,\n  0.05995366722345352,\n  0.07223246246576309,\n  0.08555807918310165,\n  0.09989789873361588,\n  0.11521684378385544,\n  0.13147741556167603,\n  0.14863981306552887,\n  0.1666620522737503,\n  0.18550002574920654,\n  0.205107644200325,\n  0.22543691098690033,\n  0.24643807113170624,\n  0.26805973052978516,\n  0.2902490198612213,\n  0.31295156478881836,\n  0.3361118733882904,\n  0.35967323184013367,\n  0.38357800245285034,\n  0.4077676832675934,\n  0.43218305706977844,\n  0.4567644000053406,\n  0.48145154118537903,\n  0.5061841011047363,\n  0.5309014916419983,\n  0.5555432438850403,\n  0.5800490975379944,\n  0.6043590903282166,\n  0.6284136772155762,\n  0.6521539688110352,\n  0.675521969795227,\n  0.6984604001045227,\n  0.7209132313728333,\n  0.7428253889083862,\n  0.7641433477401733,\n  0.7848148345947266,\n  0.8047894239425659,\n  0.8240180611610413,\n  0.8424538373947144,\n  0.8600515723228455,\n  0.876768171787262,\n  0.892562747001648,\n  0.907396674156189,\n  0.921233594417572,\n  0.9340397119522095,\n  0.9457836747169495,\n  0.9564367532730103,\n  0.9659727811813354,\n  0.9743685722351074,\n  0.9816034436225891,\n  0.9876598119735718,\n  0.9925227165222168,\n  0.9961804151535034,\n  0.9986238479614258,\n  0.9998470544815063,\n  0.9998470544815063,\n  0.9986238479614258,\n  0.9961804151535034,\n  0.9925227165222168,\n  0.9876598119735718,\n  0.9816034436225891,\n  0.9743685722351074,\n  0.9659727811813354,\n  0.9564367532730103,\n  0.9457836747169495,\n  0.9340397119522095,\n  0.921233594417572,\n  0.907396674156189,\n  0.892562747001648,\n  0.876768171787262,\n  0.8600515723228455,\n  0.8424538373947144,\n  0.8240180611610413,\n  0.8047894239425659,\n  0.7848148345947266,\n  0.7641433477401733,\n  0.7428253889083862,\n  0.7209132313728333,\n  0.6984604001045227,\n  0.675521969795227,\n  0.6521539688110352,\n  0.6284136772155762,\n  0.6043590903282166,\n  0.5800490975379944,\n  0.5555432438850403,\n  0.5309014916419983,\n  0.5061841011047363,\n  0.48145154118537903,\n  0.4567644000053406,\n  0.43218305706977844,\n  0.4077676832675934,\n  0.38357800245285034,\n  0.35967323184013367,\n  0.3361118733882904,\n  0.31295156478881836,\n  0.2902490198612213,\n  0.26805973052978516,\n  0.24643807113170624,\n  0.22543691098690033,\n  0.205107644200325,\n  0.18550002574920654,\n  0.1666620522737503,\n  0.14863981306552887,\n  0.13147741556167603,\n  0.11521684378385544,\n  0.09989789873361588,\n  0.08555807918310165,\n  0.07223246246576309,\n  0.05995366722345352,\n  0.04875174164772034,\n  0.03865409269928932,\n  0.029685435816645622,\n  0.021867716684937477,\n  0.015220067463815212,\n  0.00975875649601221,\n  0.005497147794812918,\n  0.002445670310407877,\n  0.0006117919110693038,\n  0\n]\n"
  },
  {
    "path": "__tests__/data/hanning2048.json",
    "content": "[\n  0,\n  2.355394826736301e-06,\n  9.421557479072362e-06,\n  2.1198420654400252e-05,\n  3.7685873394366354e-05,\n  5.888376108487137e-05,\n  8.47918854560703e-05,\n  0.00011540999548742548,\n  0.00015073781833052635,\n  0.00019077499746344984,\n  0.00023552117636427283,\n  0.0002849759184755385,\n  0.00033913878723978996,\n  0.00039800922968424857,\n  0.0004615867219399661,\n  0.0005298706237226725,\n  0.0006028603529557586,\n  0.000680555182043463,\n  0.0007629544124938548,\n  0.0008500572293996811,\n  0.0009418628178536892,\n  0.0010383703047409654,\n  0.0011395788751542568,\n  0.0012454874813556671,\n  0.0013560950756072998,\n  0.0014714007265865803,\n  0.0015914032701402903,\n  0.0017161016585305333,\n  0.0018454946111887693,\n  0.001979581080377102,\n  0.0021183595526963472,\n  0.002261828863993287,\n  0.0024099876172840595,\n  0.0025628346484154463,\n  0.002720368094742298,\n  0.002882586792111397,\n  0.0030494893435388803,\n  0.003221073653548956,\n  0.0033973385579884052,\n  0.003578282194212079,\n  0.003763902932405472,\n  0.003954199142754078,\n  0.004149168264120817,\n  0.004348809830844402,\n  0.0045531210489571095,\n  0.004762100055813789,\n  0.0049757445231080055,\n  0.005194053519517183,\n  0.005417024251073599,\n  0.005644654855132103,\n  0.005876942537724972,\n  0.006113885901868343,\n  0.006355482619255781,\n  0.006601730361580849,\n  0.006852626334875822,\n  0.007108168676495552,\n  0.007368355058133602,\n  0.0076331826858222485,\n  0.007902649231255054,\n  0.008176751434803009,\n  0.00845548789948225,\n  0.008738855831325054,\n  0.009026852436363697,\n  0.00931947398930788,\n  0.009616718627512455,\n  0.009918583557009697,\n  0.010225065983831882,\n  0.010536163114011288,\n  0.010851871222257614,\n  0.011172188445925713,\n  0.01149711012840271,\n  0.011826635338366032,\n  0.012160759419202805,\n  0.012499479576945305,\n  0.012842793017625809,\n  0.013190696947276592,\n  0.013543186709284782,\n  0.013900259509682655,\n  0.014261912554502487,\n  0.014628141187131405,\n  0.01499894354492426,\n  0.015374314971268177,\n  0.015754252672195435,\n  0.016138752922415733,\n  0.0165278110653162,\n  0.016921425238251686,\n  0.017319589853286743,\n  0.017722303047776222,\n  0.018129559233784676,\n  0.018541356548666954,\n  0.01895768940448761,\n  0.019378554075956345,\n  0.01980394683778286,\n  0.020233863964676857,\n  0.020668301731348038,\n  0.021107254549860954,\n  0.021550720557570457,\n  0.0219986941665411,\n  0.022451169788837433,\n  0.022908145561814308,\n  0.023369617760181427,\n  0.023835578933358192,\n  0.024306025356054306,\n  0.02478095516562462,\n  0.025260362774133682,\n  0.02574424259364605,\n  0.026232589036226273,\n  0.02672540210187435,\n  0.02722267247736454,\n  0.02772439643740654,\n  0.028230570256710052,\n  0.02874119020998478,\n  0.029256248846650124,\n  0.029775744304060936,\n  0.03029966913163662,\n  0.030828017741441727,\n  0.03136079013347626,\n  0.03189797326922417,\n  0.032439570873975754,\n  0.03298557177186012,\n  0.033535972237586975,\n  0.03409076854586601,\n  0.03464995324611664,\n  0.03521352261304855,\n  0.03578147292137146,\n  0.03635379299521446,\n  0.03693048655986786,\n  0.037511538714170456,\n  0.03809694945812225,\n  0.038686711341142654,\n  0.03928082063794136,\n  0.039879269897937775,\n  0.0404820553958416,\n  0.041089169681072235,\n  0.041700609028339386,\n  0.042316365987062454,\n  0.04293643310666084,\n  0.043560806661844254,\n  0.04418947920203209,\n  0.04482245072722435,\n  0.04545970633625984,\n  0.046101246029138565,\n  0.04674706235527992,\n  0.047397151589393616,\n  0.04805150255560875,\n  0.048710111528635025,\n  0.049372971057891846,\n  0.05004007741808891,\n  0.05071142315864563,\n  0.0513870045542717,\n  0.05206681042909622,\n  0.052750833332538605,\n  0.053439073264598846,\n  0.05413152277469635,\n  0.05482817068696022,\n  0.05552900955080986,\n  0.05623403936624527,\n  0.05694325268268585,\n  0.05765663459897041,\n  0.05837418884038925,\n  0.059095900505781174,\n  0.05982176959514618,\n  0.060551781207323074,\n  0.06128593906760216,\n  0.06202422454953194,\n  0.06276664137840271,\n  0.06351317465305328,\n  0.06426382064819336,\n  0.06501857191324234,\n  0.06577742099761963,\n  0.06654036045074463,\n  0.06730739027261734,\n  0.06807848811149597,\n  0.06885366141796112,\n  0.06963289529085159,\n  0.07041618227958679,\n  0.07120351493358612,\n  0.07199489325284958,\n  0.07279029488563538,\n  0.07358972728252411,\n  0.07439318299293518,\n  0.0752006396651268,\n  0.07601210474967957,\n  0.07682755589485168,\n  0.07764700055122375,\n  0.07847042381763458,\n  0.07929781824350357,\n  0.08012917637825012,\n  0.08096449077129364,\n  0.08180375397205353,\n  0.08264695852994919,\n  0.08349408954381943,\n  0.08434514701366425,\n  0.08520012348890305,\n  0.08605900406837463,\n  0.08692178875207901,\n  0.08778846263885498,\n  0.08865901827812195,\n  0.08953344821929932,\n  0.09041175246238708,\n  0.09129390865564346,\n  0.09217992424964905,\n  0.09306977689266205,\n  0.09396345913410187,\n  0.0948609709739685,\n  0.09576230496168137,\n  0.09666743874549866,\n  0.09757637977600098,\n  0.09848910570144653,\n  0.09940561652183533,\n  0.10032590478658676,\n  0.10124995559453964,\n  0.10217776149511337,\n  0.10310932248830795,\n  0.10404461622238159,\n  0.10498364269733429,\n  0.10592639446258545,\n  0.10687285661697388,\n  0.10782301425933838,\n  0.10877687484025955,\n  0.1097344234585762,\n  0.11069564521312714,\n  0.11166054010391235,\n  0.11262908577919006,\n  0.11360128223896027,\n  0.11457712203264236,\n  0.11555659770965576,\n  0.11653968691825867,\n  0.11752639710903168,\n  0.118516705930233,\n  0.11951060593128204,\n  0.1205080971121788,\n  0.12150915712118149,\n  0.1225137859582901,\n  0.12352197617292404,\n  0.12453370541334152,\n  0.12554897367954254,\n  0.1265677809715271,\n  0.1275900900363922,\n  0.12861591577529907,\n  0.1296452432870865,\n  0.13067805767059326,\n  0.1317143440246582,\n  0.1327541172504425,\n  0.13379733264446259,\n  0.13484400510787964,\n  0.13589411973953247,\n  0.1369476616382599,\n  0.1380046308040619,\n  0.13906501233577728,\n  0.14012877643108368,\n  0.14119595289230347,\n  0.14226649701595306,\n  0.14334040880203247,\n  0.1444176882505417,\n  0.14549832046031952,\n  0.14658229053020477,\n  0.14766958355903625,\n  0.14876019954681396,\n  0.1498541235923767,\n  0.1509513556957245,\n  0.1520518660545349,\n  0.15315565466880798,\n  0.1542627215385437,\n  0.15537303686141968,\n  0.1564866006374359,\n  0.1576033979654312,\n  0.15872342884540558,\n  0.15984666347503662,\n  0.16097311675548553,\n  0.16210275888442993,\n  0.16323557496070862,\n  0.1643715798854828,\n  0.16551074385643005,\n  0.16665305197238922,\n  0.1677985042333603,\n  0.16894708573818207,\n  0.17009878158569336,\n  0.17125359177589417,\n  0.1724115014076233,\n  0.17357249557971954,\n  0.17473655939102173,\n  0.17590369284152985,\n  0.1770738810300827,\n  0.1782471090555191,\n  0.17942336201667786,\n  0.18060263991355896,\n  0.18178492784500122,\n  0.18297022581100464,\n  0.18415848910808563,\n  0.1853497475385666,\n  0.18654395639896393,\n  0.18774113059043884,\n  0.18894124031066895,\n  0.19014427065849304,\n  0.19135023653507233,\n  0.1925591081380844,\n  0.1937708705663681,\n  0.1949855238199234,\n  0.19620303809642792,\n  0.19742342829704285,\n  0.1986466646194458,\n  0.19987273216247559,\n  0.2011016458272934,\n  0.20233336091041565,\n  0.20356787741184235,\n  0.2048051953315735,\n  0.20604529976844788,\n  0.20728816092014313,\n  0.20853379368782043,\n  0.20978215336799622,\n  0.21103326976299286,\n  0.21228709816932678,\n  0.2135436236858368,\n  0.21480286121368408,\n  0.21606479585170746,\n  0.21732939779758453,\n  0.2185966521501541,\n  0.2198665738105774,\n  0.2211391180753708,\n  0.2224142998456955,\n  0.22369210422039032,\n  0.22497250139713287,\n  0.22625549137592316,\n  0.22754105925559998,\n  0.22882919013500214,\n  0.23011988401412964,\n  0.2314131259918213,\n  0.2327088862657547,\n  0.23400716483592987,\n  0.2353079617023468,\n  0.2366112321615219,\n  0.2379170060157776,\n  0.23922523856163025,\n  0.2405359297990799,\n  0.24184906482696533,\n  0.24316462874412537,\n  0.24448262155056,\n  0.24580301344394684,\n  0.2471258044242859,\n  0.24845096468925476,\n  0.24977850914001465,\n  0.25110840797424316,\n  0.2524406611919403,\n  0.2537752389907837,\n  0.2551121413707733,\n  0.2564513385295868,\n  0.2577928304672241,\n  0.2591366171836853,\n  0.26048266887664795,\n  0.2618309557437897,\n  0.26318150758743286,\n  0.2645342946052551,\n  0.2658892869949341,\n  0.2672465145587921,\n  0.26860588788986206,\n  0.2699674665927887,\n  0.27133122086524963,\n  0.2726971209049225,\n  0.27406516671180725,\n  0.27543532848358154,\n  0.27680763602256775,\n  0.2781819999217987,\n  0.2795584797859192,\n  0.2809370458126068,\n  0.2823176681995392,\n  0.2837003469467163,\n  0.2850850522518158,\n  0.28647178411483765,\n  0.2878605127334595,\n  0.28925126791000366,\n  0.29064399003982544,\n  0.2920387089252472,\n  0.29343536496162415,\n  0.2948339581489563,\n  0.29623451828956604,\n  0.2976369559764862,\n  0.2990413308143616,\n  0.30044758319854736,\n  0.30185574293136597,\n  0.3032657504081726,\n  0.3046776056289673,\n  0.30609130859375,\n  0.30750682950019836,\n  0.3089241683483124,\n  0.31034332513809204,\n  0.3117642402648926,\n  0.3131869435310364,\n  0.31461140513420105,\n  0.3160376250743866,\n  0.31746554374694824,\n  0.31889522075653076,\n  0.3203265964984894,\n  0.3217596411705017,\n  0.32319438457489014,\n  0.3246307969093323,\n  0.32606884837150574,\n  0.3275085389614105,\n  0.32894986867904663,\n  0.3303928077220917,\n  0.33183732628822327,\n  0.3332834541797638,\n  0.3347311317920685,\n  0.3361803889274597,\n  0.3376311659812927,\n  0.3390834927558899,\n  0.34053730964660645,\n  0.34199264645576477,\n  0.3434494733810425,\n  0.3449077606201172,\n  0.3463675379753113,\n  0.34782874584198,\n  0.3492913842201233,\n  0.3507554531097412,\n  0.35222092270851135,\n  0.35368776321411133,\n  0.3551560044288635,\n  0.35662561655044556,\n  0.35809656977653503,\n  0.35956886410713196,\n  0.36104246973991394,\n  0.362517386674881,\n  0.3639936149120331,\n  0.36547109484672546,\n  0.3669498860836029,\n  0.36842989921569824,\n  0.36991116404533386,\n  0.3713936507701874,\n  0.3728773295879364,\n  0.3743622303009033,\n  0.37584832310676575,\n  0.3773355484008789,\n  0.3788239657878876,\n  0.380313515663147,\n  0.3818041980266571,\n  0.3832959830760956,\n  0.3847888708114624,\n  0.3862828314304352,\n  0.3877778649330139,\n  0.3892739713191986,\n  0.39077112078666687,\n  0.3922692835330963,\n  0.3937684893608093,\n  0.39526867866516113,\n  0.39676985144615173,\n  0.39827200770378113,\n  0.39977508783340454,\n  0.40127915143966675,\n  0.402784138917923,\n  0.40429002046585083,\n  0.4057968258857727,\n  0.4073045253753662,\n  0.40881308913230896,\n  0.41032248735427856,\n  0.4118327498435974,\n  0.4133438467979431,\n  0.4148557484149933,\n  0.4163684844970703,\n  0.41788196563720703,\n  0.4193962514400482,\n  0.4209112823009491,\n  0.42242705821990967,\n  0.42394357919692993,\n  0.4254607856273651,\n  0.42697873711586,\n  0.4284973442554474,\n  0.4300166368484497,\n  0.43153658509254456,\n  0.43305718898773193,\n  0.43457841873168945,\n  0.4361002445220947,\n  0.43762269616127014,\n  0.4391457140445709,\n  0.44066932797431946,\n  0.44219350814819336,\n  0.44371819496154785,\n  0.4452434480190277,\n  0.44676920771598816,\n  0.4482954442501068,\n  0.44982218742370605,\n  0.4513494074344635,\n  0.45287707448005676,\n  0.4544052183628082,\n  0.45593374967575073,\n  0.45746272802352905,\n  0.4589920938014984,\n  0.4605218470096588,\n  0.46205195784568787,\n  0.46358242630958557,\n  0.46511325240135193,\n  0.46664440631866455,\n  0.46817588806152344,\n  0.4697076380252838,\n  0.47123968601226807,\n  0.4727720022201538,\n  0.47430458664894104,\n  0.4758374094963074,\n  0.4773704707622528,\n  0.47890371084213257,\n  0.48043718934059143,\n  0.48197081685066223,\n  0.48350465297698975,\n  0.4850386083126068,\n  0.4865727126598358,\n  0.48810696601867676,\n  0.48964130878448486,\n  0.4911757707595825,\n  0.49271029233932495,\n  0.49424490332603455,\n  0.49577954411506653,\n  0.4973142445087433,\n  0.49884894490242004,\n  0.5003836750984192,\n  0.5019184350967407,\n  0.5034531354904175,\n  0.5049877762794495,\n  0.5065224170684814,\n  0.5080569982528687,\n  0.5095914602279663,\n  0.5111258625984192,\n  0.5126601457595825,\n  0.5141943693161011,\n  0.5157284140586853,\n  0.5172622799873352,\n  0.5187960267066956,\n  0.5203295946121216,\n  0.5218629240989685,\n  0.5233960747718811,\n  0.5249290466308594,\n  0.5264617204666138,\n  0.5279941558837891,\n  0.5295263528823853,\n  0.5310582518577576,\n  0.5325899124145508,\n  0.5341212153434753,\n  0.535652220249176,\n  0.5371828675270081,\n  0.5387131571769714,\n  0.5402430891990662,\n  0.5417726635932922,\n  0.5433018207550049,\n  0.5448305606842041,\n  0.5463588833808899,\n  0.5478867888450623,\n  0.5494142770767212,\n  0.5509412288665771,\n  0.5524677634239197,\n  0.5539937615394592,\n  0.5555192232131958,\n  0.5570442080497742,\n  0.5585686564445496,\n  0.560092568397522,\n  0.5616158843040466,\n  0.5631386041641235,\n  0.5646607279777527,\n  0.5661822557449341,\n  0.5677031874656677,\n  0.5692234635353088,\n  0.5707430839538574,\n  0.5722620487213135,\n  0.5737802982330322,\n  0.5752978920936584,\n  0.5768147706985474,\n  0.578330934047699,\n  0.5798463225364685,\n  0.5813609957695007,\n  0.5828748941421509,\n  0.5843879580497742,\n  0.5859003067016602,\n  0.5874118208885193,\n  0.5889225006103516,\n  0.590432345867157,\n  0.5919412970542908,\n  0.5934494137763977,\n  0.5949566960334778,\n  0.5964630246162415,\n  0.5979684591293335,\n  0.5994729995727539,\n  0.6009765863418579,\n  0.6024792194366455,\n  0.6039808392524719,\n  0.6054815649986267,\n  0.6069812178611755,\n  0.608479917049408,\n  0.6099776029586792,\n  0.6114742159843445,\n  0.6129697561264038,\n  0.614464282989502,\n  0.6159577369689941,\n  0.6174500584602356,\n  0.6189413070678711,\n  0.6204314231872559,\n  0.6219204068183899,\n  0.6234081983566284,\n  0.6248948574066162,\n  0.6263803839683533,\n  0.62786465883255,\n  0.6293477416038513,\n  0.6308296322822571,\n  0.6323102712631226,\n  0.6337896585464478,\n  0.6352677941322327,\n  0.6367446780204773,\n  0.6382202506065369,\n  0.6396945118904114,\n  0.6411674618721008,\n  0.6426391005516052,\n  0.6441093683242798,\n  0.6455782651901245,\n  0.6470458507537842,\n  0.6485120058059692,\n  0.6499767899513245,\n  0.6514401435852051,\n  0.6529020667076111,\n  0.6543624997138977,\n  0.6558215618133545,\n  0.6572791337966919,\n  0.6587352156639099,\n  0.6601898074150085,\n  0.661642849445343,\n  0.6630944013595581,\n  0.6645444631576538,\n  0.6659929156303406,\n  0.6674398183822632,\n  0.6688851118087769,\n  0.6703288555145264,\n  0.6717709898948669,\n  0.6732115149497986,\n  0.6746503710746765,\n  0.6760876178741455,\n  0.6775231957435608,\n  0.6789571046829224,\n  0.6803892850875854,\n  0.6818198561668396,\n  0.6832486391067505,\n  0.6846756935119629,\n  0.6861010193824768,\n  0.6875246167182922,\n  0.6889464259147644,\n  0.6903665065765381,\n  0.6917847394943237,\n  0.6932011842727661,\n  0.6946157813072205,\n  0.6960285305976868,\n  0.6974394917488098,\n  0.6988485455513,\n  0.7002557516098022,\n  0.7016611099243164,\n  0.703064501285553,\n  0.7044659852981567,\n  0.7058655619621277,\n  0.7072632312774658,\n  0.7086588740348816,\n  0.7100526094436646,\n  0.7114443778991699,\n  0.7128341197967529,\n  0.7142218351364136,\n  0.7156075835227966,\n  0.7169912457466125,\n  0.7183728814125061,\n  0.7197524905204773,\n  0.7211300134658813,\n  0.7225054502487183,\n  0.723878800868988,\n  0.7252500057220459,\n  0.7266191244125366,\n  0.7279860973358154,\n  0.7293509244918823,\n  0.7307136058807373,\n  0.7320740818977356,\n  0.7334323525428772,\n  0.7347884774208069,\n  0.7361423969268799,\n  0.7374940514564514,\n  0.7388434410095215,\n  0.7401906251907349,\n  0.7415355443954468,\n  0.7428781986236572,\n  0.7442185282707214,\n  0.7455565929412842,\n  0.7468923330307007,\n  0.748225748538971,\n  0.749556839466095,\n  0.750885546207428,\n  0.7522119283676147,\n  0.7535358667373657,\n  0.7548574805259705,\n  0.7561766505241394,\n  0.7574934363365173,\n  0.7588078379631042,\n  0.7601197361946106,\n  0.7614291906356812,\n  0.7627362012863159,\n  0.7640407085418701,\n  0.7653427720069885,\n  0.7666422724723816,\n  0.7679393291473389,\n  0.7692338228225708,\n  0.7705257534980774,\n  0.7718151807785034,\n  0.7731020450592041,\n  0.7743863463401794,\n  0.7756680250167847,\n  0.7769471406936646,\n  0.7782236337661743,\n  0.779497504234314,\n  0.7807686924934387,\n  0.7820373177528381,\n  0.7833032608032227,\n  0.7845665216445923,\n  0.785827100276947,\n  0.7870849967002869,\n  0.788340151309967,\n  0.7895926237106323,\n  0.7908423542976379,\n  0.7920893430709839,\n  0.7933335900306702,\n  0.7945750951766968,\n  0.795813798904419,\n  0.7970497012138367,\n  0.7982828617095947,\n  0.7995131611824036,\n  0.800740659236908,\n  0.8019652962684631,\n  0.8031871318817139,\n  0.8044061064720154,\n  0.8056221604347229,\n  0.8068353533744812,\n  0.8080456852912903,\n  0.8092530965805054,\n  0.8104575872421265,\n  0.8116591572761536,\n  0.8128578066825867,\n  0.8140535354614258,\n  0.8152462244033813,\n  0.8164359927177429,\n  0.8176227807998657,\n  0.8188065886497498,\n  0.8199873566627502,\n  0.821165144443512,\n  0.8223398923873901,\n  0.8235116004943848,\n  0.8246802687644958,\n  0.8258458375930786,\n  0.8270083665847778,\n  0.8281678557395935,\n  0.8293241858482361,\n  0.8304774761199951,\n  0.831627607345581,\n  0.8327746391296387,\n  0.8339185118675232,\n  0.8350592255592346,\n  0.8361968398094177,\n  0.837331235408783,\n  0.8384624719619751,\n  0.8395904898643494,\n  0.8407153487205505,\n  0.8418369889259338,\n  0.8429554104804993,\n  0.8440706133842468,\n  0.8451825380325317,\n  0.8462912440299988,\n  0.8473966717720032,\n  0.8484988212585449,\n  0.849597692489624,\n  0.8506932258605957,\n  0.8517855405807495,\n  0.8528744578361511,\n  0.8539600968360901,\n  0.8550423979759216,\n  0.8561213612556458,\n  0.8571969866752625,\n  0.858269214630127,\n  0.8593380451202393,\n  0.8604035377502441,\n  0.8614656329154968,\n  0.8625242710113525,\n  0.863579511642456,\n  0.8646313548088074,\n  0.8656797409057617,\n  0.8667247295379639,\n  0.8677662014961243,\n  0.8688042163848877,\n  0.8698387742042542,\n  0.8708698749542236,\n  0.8718974590301514,\n  0.8729215264320374,\n  0.8739420771598816,\n  0.8749591112136841,\n  0.8759726285934448,\n  0.876982569694519,\n  0.8779889941215515,\n  0.8789918422698975,\n  0.8799911141395569,\n  0.8809868097305298,\n  0.8819789290428162,\n  0.8829674124717712,\n  0.8839523196220398,\n  0.884933590888977,\n  0.885911226272583,\n  0.8868852853775024,\n  0.8878556489944458,\n  0.8888223767280579,\n  0.8897854089736938,\n  0.8907448053359985,\n  0.8917005062103271,\n  0.8926525115966797,\n  0.8936008214950562,\n  0.8945454359054565,\n  0.8954863548278809,\n  0.8964235186576843,\n  0.8973569273948669,\n  0.8982865810394287,\n  0.8992125391960144,\n  0.9001346826553345,\n  0.9010531306266785,\n  0.9019677042961121,\n  0.9028785824775696,\n  0.9037855863571167,\n  0.904688835144043,\n  0.9055882692337036,\n  0.9064838886260986,\n  0.9073756337165833,\n  0.9082635641098022,\n  0.9091476798057556,\n  0.9100278615951538,\n  0.9109042286872864,\n  0.9117767214775085,\n  0.9126453399658203,\n  0.9135100841522217,\n  0.9143709540367126,\n  0.9152278304100037,\n  0.916080892086029,\n  0.9169299602508545,\n  0.9177751541137695,\n  0.9186163544654846,\n  0.9194536805152893,\n  0.920287013053894,\n  0.9211163520812988,\n  0.9219417572021484,\n  0.9227632284164429,\n  0.9235806465148926,\n  0.9243941307067871,\n  0.9252035617828369,\n  0.9260090589523315,\n  0.9268105030059814,\n  0.9276078939437866,\n  0.9284012913703918,\n  0.9291906356811523,\n  0.9299759864807129,\n  0.9307572245597839,\n  0.9315344095230103,\n  0.9323075413703918,\n  0.9330766201019287,\n  0.9338416457176208,\n  0.9346024990081787,\n  0.9353592991828918,\n  0.9361119866371155,\n  0.9368606209754944,\n  0.937605082988739,\n  0.9383454322814941,\n  0.9390816688537598,\n  0.9398137331008911,\n  0.940541684627533,\n  0.9412654638290405,\n  0.9419851303100586,\n  0.9427005648612976,\n  0.9434118866920471,\n  0.9441189765930176,\n  0.9448219537734985,\n  0.9455206990242004,\n  0.9462152123451233,\n  0.9469055533409119,\n  0.9475917220115662,\n  0.9482735991477966,\n  0.9489513039588928,\n  0.94962477684021,\n  0.950294017791748,\n  0.9509589672088623,\n  0.9516197443008423,\n  0.9522762298583984,\n  0.9529284238815308,\n  0.953576385974884,\n  0.9542200565338135,\n  0.9548594355583191,\n  0.9554945826530457,\n  0.9561253786087036,\n  0.9567519426345825,\n  0.9573741555213928,\n  0.9579920768737793,\n  0.9586056470870972,\n  0.9592149257659912,\n  0.9598198533058167,\n  0.9604204893112183,\n  0.9610167741775513,\n  0.9616087079048157,\n  0.9621962904930115,\n  0.9627795219421387,\n  0.9633584022521973,\n  0.9639329314231873,\n  0.9645030498504639,\n  0.9650688171386719,\n  0.9656301736831665,\n  0.9661871790885925,\n  0.9667397737503052,\n  0.9672879576683044,\n  0.9678317904472351,\n  0.9683711528778076,\n  0.9689061641693115,\n  0.9694367051124573,\n  0.9699628353118896,\n  0.9704845547676086,\n  0.9710018634796143,\n  0.9715147018432617,\n  0.972023069858551,\n  0.972527027130127,\n  0.9730265140533447,\n  0.9735215902328491,\n  0.9740121364593506,\n  0.9744982719421387,\n  0.9749798774719238,\n  0.9754570722579956,\n  0.9759297370910645,\n  0.9763979911804199,\n  0.9768616557121277,\n  0.9773209095001221,\n  0.9777756333351135,\n  0.978225827217102,\n  0.9786715507507324,\n  0.9791128039360046,\n  0.9795494675636292,\n  0.9799816608428955,\n  0.9804093241691589,\n  0.9808324575424194,\n  0.981251060962677,\n  0.9816651344299316,\n  0.9820746183395386,\n  0.9824796319007874,\n  0.9828800559043884,\n  0.9832759499549866,\n  0.9836673140525818,\n  0.9840540885925293,\n  0.9844362735748291,\n  0.984813928604126,\n  0.9851870536804199,\n  0.9855555295944214,\n  0.9859194755554199,\n  0.9862788319587708,\n  0.9866336584091187,\n  0.9869838356971741,\n  0.9873294234275818,\n  0.9876704812049866,\n  0.9880068898200989,\n  0.9883387088775635,\n  0.9886659383773804,\n  0.9889885187149048,\n  0.9893065690994263,\n  0.9896199703216553,\n  0.9899287223815918,\n  0.9902329444885254,\n  0.9905324578285217,\n  0.9908274412155151,\n  0.9911177158355713,\n  0.9914034008979797,\n  0.9916844367980957,\n  0.991960883140564,\n  0.9922326803207397,\n  0.992499828338623,\n  0.9927623271942139,\n  0.9930201768875122,\n  0.9932733774185181,\n  0.9935219883918762,\n  0.9937658905982971,\n  0.9940051436424255,\n  0.9942398071289062,\n  0.9944697618484497,\n  0.9946950674057007,\n  0.9949156641960144,\n  0.9951316714286804,\n  0.9953429698944092,\n  0.9955496191978455,\n  0.9957516193389893,\n  0.9959489107131958,\n  0.9961415529251099,\n  0.9963294863700867,\n  0.996512770652771,\n  0.9966914057731628,\n  0.9968653321266174,\n  0.9970345497131348,\n  0.9971991181373596,\n  0.9973589777946472,\n  0.9975141882896423,\n  0.9976646900177002,\n  0.9978104829788208,\n  0.9979516267776489,\n  0.9980880618095398,\n  0.9982197880744934,\n  0.9983468055725098,\n  0.9984691739082336,\n  0.9985868334770203,\n  0.9986997842788696,\n  0.9988080263137817,\n  0.9989116191864014,\n  0.999010443687439,\n  0.9991046190261841,\n  0.9991940855979919,\n  0.9992788434028625,\n  0.9993588924407959,\n  0.999434232711792,\n  0.9995048642158508,\n  0.9995707869529724,\n  0.9996320009231567,\n  0.9996885061264038,\n  0.9997403621673584,\n  0.999787449836731,\n  0.9998298287391663,\n  0.9998674988746643,\n  0.9999004602432251,\n  0.9999287724494934,\n  0.9999523162841797,\n  0.9999711513519287,\n  0.9999852776527405,\n  0.999994695186615,\n  0.9999994039535522,\n  0.9999994039535522,\n  0.999994695186615,\n  0.9999852776527405,\n  0.9999711513519287,\n  0.9999523162841797,\n  0.9999287724494934,\n  0.9999004602432251,\n  0.9998674988746643,\n  0.9998298287391663,\n  0.999787449836731,\n  0.9997403621673584,\n  0.9996885061264038,\n  0.9996320009231567,\n  0.9995707869529724,\n  0.9995048642158508,\n  0.999434232711792,\n  0.9993588924407959,\n  0.9992788434028625,\n  0.9991940855979919,\n  0.9991046190261841,\n  0.999010443687439,\n  0.9989116191864014,\n  0.9988080263137817,\n  0.9986997842788696,\n  0.9985868334770203,\n  0.9984691739082336,\n  0.9983468055725098,\n  0.9982197880744934,\n  0.9980880618095398,\n  0.9979516267776489,\n  0.9978104829788208,\n  0.9976646900177002,\n  0.9975141882896423,\n  0.9973589777946472,\n  0.9971991181373596,\n  0.9970345497131348,\n  0.9968653321266174,\n  0.9966914057731628,\n  0.996512770652771,\n  0.9963294863700867,\n  0.9961415529251099,\n  0.9959489107131958,\n  0.9957516193389893,\n  0.9955496191978455,\n  0.9953429698944092,\n  0.9951316714286804,\n  0.9949156641960144,\n  0.9946950674057007,\n  0.9944697618484497,\n  0.9942398071289062,\n  0.9940051436424255,\n  0.9937658905982971,\n  0.9935219883918762,\n  0.9932733774185181,\n  0.9930201768875122,\n  0.9927623271942139,\n  0.992499828338623,\n  0.9922326803207397,\n  0.991960883140564,\n  0.9916844367980957,\n  0.9914034008979797,\n  0.9911177158355713,\n  0.9908274412155151,\n  0.9905324578285217,\n  0.9902329444885254,\n  0.9899287223815918,\n  0.9896199703216553,\n  0.9893065690994263,\n  0.9889885187149048,\n  0.9886659383773804,\n  0.9883387088775635,\n  0.9880068898200989,\n  0.9876704812049866,\n  0.9873294234275818,\n  0.9869838356971741,\n  0.9866336584091187,\n  0.9862788319587708,\n  0.9859194755554199,\n  0.9855555295944214,\n  0.9851870536804199,\n  0.984813928604126,\n  0.9844362735748291,\n  0.9840540885925293,\n  0.9836673140525818,\n  0.9832759499549866,\n  0.9828800559043884,\n  0.9824796319007874,\n  0.9820746183395386,\n  0.9816651344299316,\n  0.981251060962677,\n  0.9808324575424194,\n  0.9804093241691589,\n  0.9799816608428955,\n  0.9795494675636292,\n  0.9791128039360046,\n  0.9786715507507324,\n  0.978225827217102,\n  0.9777756333351135,\n  0.9773209095001221,\n  0.9768616557121277,\n  0.9763979911804199,\n  0.9759297370910645,\n  0.9754570722579956,\n  0.9749798774719238,\n  0.9744982719421387,\n  0.9740121364593506,\n  0.9735215902328491,\n  0.9730265140533447,\n  0.972527027130127,\n  0.972023069858551,\n  0.9715147018432617,\n  0.9710018634796143,\n  0.9704845547676086,\n  0.9699628353118896,\n  0.9694367051124573,\n  0.9689061641693115,\n  0.9683711528778076,\n  0.9678317904472351,\n  0.9672879576683044,\n  0.9667397737503052,\n  0.9661871790885925,\n  0.9656301736831665,\n  0.9650688171386719,\n  0.9645030498504639,\n  0.9639329314231873,\n  0.9633584022521973,\n  0.9627795219421387,\n  0.9621962904930115,\n  0.9616087079048157,\n  0.9610167741775513,\n  0.9604204893112183,\n  0.9598198533058167,\n  0.9592149257659912,\n  0.9586056470870972,\n  0.9579920768737793,\n  0.9573741555213928,\n  0.9567519426345825,\n  0.9561253786087036,\n  0.9554945826530457,\n  0.9548594355583191,\n  0.9542200565338135,\n  0.953576385974884,\n  0.9529284238815308,\n  0.9522762298583984,\n  0.9516197443008423,\n  0.9509589672088623,\n  0.950294017791748,\n  0.94962477684021,\n  0.9489513039588928,\n  0.9482735991477966,\n  0.9475917220115662,\n  0.9469055533409119,\n  0.9462152123451233,\n  0.9455206990242004,\n  0.9448219537734985,\n  0.9441189765930176,\n  0.9434118866920471,\n  0.9427005648612976,\n  0.9419851303100586,\n  0.9412654638290405,\n  0.940541684627533,\n  0.9398137331008911,\n  0.9390816688537598,\n  0.9383454322814941,\n  0.937605082988739,\n  0.9368606209754944,\n  0.9361119866371155,\n  0.9353592991828918,\n  0.9346024990081787,\n  0.9338416457176208,\n  0.9330766201019287,\n  0.9323075413703918,\n  0.9315344095230103,\n  0.9307572245597839,\n  0.9299759864807129,\n  0.9291906356811523,\n  0.9284012913703918,\n  0.9276078939437866,\n  0.9268105030059814,\n  0.9260090589523315,\n  0.9252035617828369,\n  0.9243941307067871,\n  0.9235806465148926,\n  0.9227632284164429,\n  0.9219417572021484,\n  0.9211163520812988,\n  0.920287013053894,\n  0.9194536805152893,\n  0.9186163544654846,\n  0.9177751541137695,\n  0.9169299602508545,\n  0.916080892086029,\n  0.9152278304100037,\n  0.9143709540367126,\n  0.9135100841522217,\n  0.9126453399658203,\n  0.9117767214775085,\n  0.9109042286872864,\n  0.9100278615951538,\n  0.9091476798057556,\n  0.9082635641098022,\n  0.9073756337165833,\n  0.9064838886260986,\n  0.9055882692337036,\n  0.904688835144043,\n  0.9037855863571167,\n  0.9028785824775696,\n  0.9019677042961121,\n  0.9010531306266785,\n  0.9001346826553345,\n  0.8992125391960144,\n  0.8982865810394287,\n  0.8973569273948669,\n  0.8964235186576843,\n  0.8954863548278809,\n  0.8945454359054565,\n  0.8936008214950562,\n  0.8926525115966797,\n  0.8917005062103271,\n  0.8907448053359985,\n  0.8897854089736938,\n  0.8888223767280579,\n  0.8878556489944458,\n  0.8868852853775024,\n  0.885911226272583,\n  0.884933590888977,\n  0.8839523196220398,\n  0.8829674124717712,\n  0.8819789290428162,\n  0.8809868097305298,\n  0.8799911141395569,\n  0.8789918422698975,\n  0.8779889941215515,\n  0.876982569694519,\n  0.8759726285934448,\n  0.8749591112136841,\n  0.8739420771598816,\n  0.8729215264320374,\n  0.8718974590301514,\n  0.8708698749542236,\n  0.8698387742042542,\n  0.8688042163848877,\n  0.8677662014961243,\n  0.8667247295379639,\n  0.8656797409057617,\n  0.8646313548088074,\n  0.863579511642456,\n  0.8625242710113525,\n  0.8614656329154968,\n  0.8604035377502441,\n  0.8593380451202393,\n  0.858269214630127,\n  0.8571969866752625,\n  0.8561213612556458,\n  0.8550423979759216,\n  0.8539600968360901,\n  0.8528744578361511,\n  0.8517855405807495,\n  0.8506932258605957,\n  0.849597692489624,\n  0.8484988212585449,\n  0.8473966717720032,\n  0.8462912440299988,\n  0.8451825380325317,\n  0.8440706133842468,\n  0.8429554104804993,\n  0.8418369889259338,\n  0.8407153487205505,\n  0.8395904898643494,\n  0.8384624719619751,\n  0.837331235408783,\n  0.8361968398094177,\n  0.8350592255592346,\n  0.8339185118675232,\n  0.8327746391296387,\n  0.831627607345581,\n  0.8304774761199951,\n  0.8293241858482361,\n  0.8281678557395935,\n  0.8270083665847778,\n  0.8258458375930786,\n  0.8246802687644958,\n  0.8235116004943848,\n  0.8223398923873901,\n  0.821165144443512,\n  0.8199873566627502,\n  0.8188065886497498,\n  0.8176227807998657,\n  0.8164359927177429,\n  0.8152462244033813,\n  0.8140535354614258,\n  0.8128578066825867,\n  0.8116591572761536,\n  0.8104575872421265,\n  0.8092530965805054,\n  0.8080456852912903,\n  0.8068353533744812,\n  0.8056221604347229,\n  0.8044061064720154,\n  0.8031871318817139,\n  0.8019652962684631,\n  0.800740659236908,\n  0.7995131611824036,\n  0.7982828617095947,\n  0.7970497012138367,\n  0.795813798904419,\n  0.7945750951766968,\n  0.7933335900306702,\n  0.7920893430709839,\n  0.7908423542976379,\n  0.7895926237106323,\n  0.788340151309967,\n  0.7870849967002869,\n  0.785827100276947,\n  0.7845665216445923,\n  0.7833032608032227,\n  0.7820373177528381,\n  0.7807686924934387,\n  0.779497504234314,\n  0.7782236337661743,\n  0.7769471406936646,\n  0.7756680250167847,\n  0.7743863463401794,\n  0.7731020450592041,\n  0.7718151807785034,\n  0.7705257534980774,\n  0.7692338228225708,\n  0.7679393291473389,\n  0.7666422724723816,\n  0.7653427720069885,\n  0.7640407085418701,\n  0.7627362012863159,\n  0.7614291906356812,\n  0.7601197361946106,\n  0.7588078379631042,\n  0.7574934363365173,\n  0.7561766505241394,\n  0.7548574805259705,\n  0.7535358667373657,\n  0.7522119283676147,\n  0.750885546207428,\n  0.749556839466095,\n  0.748225748538971,\n  0.7468923330307007,\n  0.7455565929412842,\n  0.7442185282707214,\n  0.7428781986236572,\n  0.7415355443954468,\n  0.7401906251907349,\n  0.7388434410095215,\n  0.7374940514564514,\n  0.7361423969268799,\n  0.7347884774208069,\n  0.7334323525428772,\n  0.7320740818977356,\n  0.7307136058807373,\n  0.7293509244918823,\n  0.7279860973358154,\n  0.7266191244125366,\n  0.7252500057220459,\n  0.723878800868988,\n  0.7225054502487183,\n  0.7211300134658813,\n  0.7197524905204773,\n  0.7183728814125061,\n  0.7169912457466125,\n  0.7156075835227966,\n  0.7142218351364136,\n  0.7128341197967529,\n  0.7114443778991699,\n  0.7100526094436646,\n  0.7086588740348816,\n  0.7072632312774658,\n  0.7058655619621277,\n  0.7044659852981567,\n  0.703064501285553,\n  0.7016611099243164,\n  0.7002557516098022,\n  0.6988485455513,\n  0.6974394917488098,\n  0.6960285305976868,\n  0.6946157813072205,\n  0.6932011842727661,\n  0.6917847394943237,\n  0.6903665065765381,\n  0.6889464259147644,\n  0.6875246167182922,\n  0.6861010193824768,\n  0.6846756935119629,\n  0.6832486391067505,\n  0.6818198561668396,\n  0.6803892850875854,\n  0.6789571046829224,\n  0.6775231957435608,\n  0.6760876178741455,\n  0.6746503710746765,\n  0.6732115149497986,\n  0.6717709898948669,\n  0.6703288555145264,\n  0.6688851118087769,\n  0.6674398183822632,\n  0.6659929156303406,\n  0.6645444631576538,\n  0.6630944013595581,\n  0.661642849445343,\n  0.6601898074150085,\n  0.6587352156639099,\n  0.6572791337966919,\n  0.6558215618133545,\n  0.6543624997138977,\n  0.6529020667076111,\n  0.6514401435852051,\n  0.6499767899513245,\n  0.6485120058059692,\n  0.6470458507537842,\n  0.6455782651901245,\n  0.6441093683242798,\n  0.6426391005516052,\n  0.6411674618721008,\n  0.6396945118904114,\n  0.6382202506065369,\n  0.6367446780204773,\n  0.6352677941322327,\n  0.6337896585464478,\n  0.6323102712631226,\n  0.6308296322822571,\n  0.6293477416038513,\n  0.62786465883255,\n  0.6263803839683533,\n  0.6248948574066162,\n  0.6234081983566284,\n  0.6219204068183899,\n  0.6204314231872559,\n  0.6189413070678711,\n  0.6174500584602356,\n  0.6159577369689941,\n  0.614464282989502,\n  0.6129697561264038,\n  0.6114742159843445,\n  0.6099776029586792,\n  0.608479917049408,\n  0.6069812178611755,\n  0.6054815649986267,\n  0.6039808392524719,\n  0.6024792194366455,\n  0.6009765863418579,\n  0.5994729995727539,\n  0.5979684591293335,\n  0.5964630246162415,\n  0.5949566960334778,\n  0.5934494137763977,\n  0.5919412970542908,\n  0.590432345867157,\n  0.5889225006103516,\n  0.5874118208885193,\n  0.5859003067016602,\n  0.5843879580497742,\n  0.5828748941421509,\n  0.5813609957695007,\n  0.5798463225364685,\n  0.578330934047699,\n  0.5768147706985474,\n  0.5752978920936584,\n  0.5737802982330322,\n  0.5722620487213135,\n  0.5707430839538574,\n  0.5692234635353088,\n  0.5677031874656677,\n  0.5661822557449341,\n  0.5646607279777527,\n  0.5631386041641235,\n  0.5616158843040466,\n  0.560092568397522,\n  0.5585686564445496,\n  0.5570442080497742,\n  0.5555192232131958,\n  0.5539937615394592,\n  0.5524677634239197,\n  0.5509412288665771,\n  0.5494142770767212,\n  0.5478867888450623,\n  0.5463588833808899,\n  0.5448305606842041,\n  0.5433018207550049,\n  0.5417726635932922,\n  0.5402430891990662,\n  0.5387131571769714,\n  0.5371828675270081,\n  0.535652220249176,\n  0.5341212153434753,\n  0.5325899124145508,\n  0.5310582518577576,\n  0.5295263528823853,\n  0.5279941558837891,\n  0.5264617204666138,\n  0.5249290466308594,\n  0.5233960747718811,\n  0.5218629240989685,\n  0.5203295946121216,\n  0.5187960267066956,\n  0.5172622799873352,\n  0.5157284140586853,\n  0.5141943693161011,\n  0.5126601457595825,\n  0.5111258625984192,\n  0.5095914602279663,\n  0.5080569982528687,\n  0.5065224170684814,\n  0.5049877762794495,\n  0.5034531354904175,\n  0.5019184350967407,\n  0.5003836750984192,\n  0.49884894490242004,\n  0.4973142445087433,\n  0.49577954411506653,\n  0.49424490332603455,\n  0.49271029233932495,\n  0.4911757707595825,\n  0.48964130878448486,\n  0.48810696601867676,\n  0.4865727126598358,\n  0.4850386083126068,\n  0.48350465297698975,\n  0.48197081685066223,\n  0.48043718934059143,\n  0.47890371084213257,\n  0.4773704707622528,\n  0.4758374094963074,\n  0.47430458664894104,\n  0.4727720022201538,\n  0.47123968601226807,\n  0.4697076380252838,\n  0.46817588806152344,\n  0.46664440631866455,\n  0.46511325240135193,\n  0.46358242630958557,\n  0.46205195784568787,\n  0.4605218470096588,\n  0.4589920938014984,\n  0.45746272802352905,\n  0.45593374967575073,\n  0.4544052183628082,\n  0.45287707448005676,\n  0.4513494074344635,\n  0.44982218742370605,\n  0.4482954442501068,\n  0.44676920771598816,\n  0.4452434480190277,\n  0.44371819496154785,\n  0.44219350814819336,\n  0.44066932797431946,\n  0.4391457140445709,\n  0.43762269616127014,\n  0.4361002445220947,\n  0.43457841873168945,\n  0.43305718898773193,\n  0.43153658509254456,\n  0.4300166368484497,\n  0.4284973442554474,\n  0.42697873711586,\n  0.4254607856273651,\n  0.42394357919692993,\n  0.42242705821990967,\n  0.4209112823009491,\n  0.4193962514400482,\n  0.41788196563720703,\n  0.4163684844970703,\n  0.4148557484149933,\n  0.4133438467979431,\n  0.4118327498435974,\n  0.41032248735427856,\n  0.40881308913230896,\n  0.4073045253753662,\n  0.4057968258857727,\n  0.40429002046585083,\n  0.402784138917923,\n  0.40127915143966675,\n  0.39977508783340454,\n  0.39827200770378113,\n  0.39676985144615173,\n  0.39526867866516113,\n  0.3937684893608093,\n  0.3922692835330963,\n  0.39077112078666687,\n  0.3892739713191986,\n  0.3877778649330139,\n  0.3862828314304352,\n  0.3847888708114624,\n  0.3832959830760956,\n  0.3818041980266571,\n  0.380313515663147,\n  0.3788239657878876,\n  0.3773355484008789,\n  0.37584832310676575,\n  0.3743622303009033,\n  0.3728773295879364,\n  0.3713936507701874,\n  0.36991116404533386,\n  0.36842989921569824,\n  0.3669498860836029,\n  0.36547109484672546,\n  0.3639936149120331,\n  0.362517386674881,\n  0.36104246973991394,\n  0.35956886410713196,\n  0.35809656977653503,\n  0.35662561655044556,\n  0.3551560044288635,\n  0.35368776321411133,\n  0.35222092270851135,\n  0.3507554531097412,\n  0.3492913842201233,\n  0.34782874584198,\n  0.3463675379753113,\n  0.3449077606201172,\n  0.3434494733810425,\n  0.34199264645576477,\n  0.34053730964660645,\n  0.3390834927558899,\n  0.3376311659812927,\n  0.3361803889274597,\n  0.3347311317920685,\n  0.3332834541797638,\n  0.33183732628822327,\n  0.3303928077220917,\n  0.32894986867904663,\n  0.3275085389614105,\n  0.32606884837150574,\n  0.3246307969093323,\n  0.32319438457489014,\n  0.3217596411705017,\n  0.3203265964984894,\n  0.31889522075653076,\n  0.31746554374694824,\n  0.3160376250743866,\n  0.31461140513420105,\n  0.3131869435310364,\n  0.3117642402648926,\n  0.31034332513809204,\n  0.3089241683483124,\n  0.30750682950019836,\n  0.30609130859375,\n  0.3046776056289673,\n  0.3032657504081726,\n  0.30185574293136597,\n  0.30044758319854736,\n  0.2990413308143616,\n  0.2976369559764862,\n  0.29623451828956604,\n  0.2948339581489563,\n  0.29343536496162415,\n  0.2920387089252472,\n  0.29064399003982544,\n  0.28925126791000366,\n  0.2878605127334595,\n  0.28647178411483765,\n  0.2850850522518158,\n  0.2837003469467163,\n  0.2823176681995392,\n  0.2809370458126068,\n  0.2795584797859192,\n  0.2781819999217987,\n  0.27680763602256775,\n  0.27543532848358154,\n  0.27406516671180725,\n  0.2726971209049225,\n  0.27133122086524963,\n  0.2699674665927887,\n  0.26860588788986206,\n  0.2672465145587921,\n  0.2658892869949341,\n  0.2645342946052551,\n  0.26318150758743286,\n  0.2618309557437897,\n  0.26048266887664795,\n  0.2591366171836853,\n  0.2577928304672241,\n  0.2564513385295868,\n  0.2551121413707733,\n  0.2537752389907837,\n  0.2524406611919403,\n  0.25110840797424316,\n  0.24977850914001465,\n  0.24845096468925476,\n  0.2471258044242859,\n  0.24580301344394684,\n  0.24448262155056,\n  0.24316462874412537,\n  0.24184906482696533,\n  0.2405359297990799,\n  0.23922523856163025,\n  0.2379170060157776,\n  0.2366112321615219,\n  0.2353079617023468,\n  0.23400716483592987,\n  0.2327088862657547,\n  0.2314131259918213,\n  0.23011988401412964,\n  0.22882919013500214,\n  0.22754105925559998,\n  0.22625549137592316,\n  0.22497250139713287,\n  0.22369210422039032,\n  0.2224142998456955,\n  0.2211391180753708,\n  0.2198665738105774,\n  0.2185966521501541,\n  0.21732939779758453,\n  0.21606479585170746,\n  0.21480286121368408,\n  0.2135436236858368,\n  0.21228709816932678,\n  0.21103326976299286,\n  0.20978215336799622,\n  0.20853379368782043,\n  0.20728816092014313,\n  0.20604529976844788,\n  0.2048051953315735,\n  0.20356787741184235,\n  0.20233336091041565,\n  0.2011016458272934,\n  0.19987273216247559,\n  0.1986466646194458,\n  0.19742342829704285,\n  0.19620303809642792,\n  0.1949855238199234,\n  0.1937708705663681,\n  0.1925591081380844,\n  0.19135023653507233,\n  0.19014427065849304,\n  0.18894124031066895,\n  0.18774113059043884,\n  0.18654395639896393,\n  0.1853497475385666,\n  0.18415848910808563,\n  0.18297022581100464,\n  0.18178492784500122,\n  0.18060263991355896,\n  0.17942336201667786,\n  0.1782471090555191,\n  0.1770738810300827,\n  0.17590369284152985,\n  0.17473655939102173,\n  0.17357249557971954,\n  0.1724115014076233,\n  0.17125359177589417,\n  0.17009878158569336,\n  0.16894708573818207,\n  0.1677985042333603,\n  0.16665305197238922,\n  0.16551074385643005,\n  0.1643715798854828,\n  0.16323557496070862,\n  0.16210275888442993,\n  0.16097311675548553,\n  0.15984666347503662,\n  0.15872342884540558,\n  0.1576033979654312,\n  0.1564866006374359,\n  0.15537303686141968,\n  0.1542627215385437,\n  0.15315565466880798,\n  0.1520518660545349,\n  0.1509513556957245,\n  0.1498541235923767,\n  0.14876019954681396,\n  0.14766958355903625,\n  0.14658229053020477,\n  0.14549832046031952,\n  0.1444176882505417,\n  0.14334040880203247,\n  0.14226649701595306,\n  0.14119595289230347,\n  0.14012877643108368,\n  0.13906501233577728,\n  0.1380046308040619,\n  0.1369476616382599,\n  0.13589411973953247,\n  0.13484400510787964,\n  0.13379733264446259,\n  0.1327541172504425,\n  0.1317143440246582,\n  0.13067805767059326,\n  0.1296452432870865,\n  0.12861591577529907,\n  0.1275900900363922,\n  0.1265677809715271,\n  0.12554897367954254,\n  0.12453370541334152,\n  0.12352197617292404,\n  0.1225137859582901,\n  0.12150915712118149,\n  0.1205080971121788,\n  0.11951060593128204,\n  0.118516705930233,\n  0.11752639710903168,\n  0.11653968691825867,\n  0.11555659770965576,\n  0.11457712203264236,\n  0.11360128223896027,\n  0.11262908577919006,\n  0.11166054010391235,\n  0.11069564521312714,\n  0.1097344234585762,\n  0.10877687484025955,\n  0.10782301425933838,\n  0.10687285661697388,\n  0.10592639446258545,\n  0.10498364269733429,\n  0.10404461622238159,\n  0.10310932248830795,\n  0.10217776149511337,\n  0.10124995559453964,\n  0.10032590478658676,\n  0.09940561652183533,\n  0.09848910570144653,\n  0.09757637977600098,\n  0.09666743874549866,\n  0.09576230496168137,\n  0.0948609709739685,\n  0.09396345913410187,\n  0.09306977689266205,\n  0.09217992424964905,\n  0.09129390865564346,\n  0.09041175246238708,\n  0.08953344821929932,\n  0.08865901827812195,\n  0.08778846263885498,\n  0.08692178875207901,\n  0.08605900406837463,\n  0.08520012348890305,\n  0.08434514701366425,\n  0.08349408954381943,\n  0.08264695852994919,\n  0.08180375397205353,\n  0.08096449077129364,\n  0.08012917637825012,\n  0.07929781824350357,\n  0.07847042381763458,\n  0.07764700055122375,\n  0.07682755589485168,\n  0.07601210474967957,\n  0.0752006396651268,\n  0.07439318299293518,\n  0.07358972728252411,\n  0.07279029488563538,\n  0.07199489325284958,\n  0.07120351493358612,\n  0.07041618227958679,\n  0.06963289529085159,\n  0.06885366141796112,\n  0.06807848811149597,\n  0.06730739027261734,\n  0.06654036045074463,\n  0.06577742099761963,\n  0.06501857191324234,\n  0.06426382064819336,\n  0.06351317465305328,\n  0.06276664137840271,\n  0.06202422454953194,\n  0.06128593906760216,\n  0.060551781207323074,\n  0.05982176959514618,\n  0.059095900505781174,\n  0.05837418884038925,\n  0.05765663459897041,\n  0.05694325268268585,\n  0.05623403936624527,\n  0.05552900955080986,\n  0.05482817068696022,\n  0.05413152277469635,\n  0.053439073264598846,\n  0.052750833332538605,\n  0.05206681042909622,\n  0.0513870045542717,\n  0.05071142315864563,\n  0.05004007741808891,\n  0.049372971057891846,\n  0.048710111528635025,\n  0.04805150255560875,\n  0.047397151589393616,\n  0.04674706235527992,\n  0.046101246029138565,\n  0.04545970633625984,\n  0.04482245072722435,\n  0.04418947920203209,\n  0.043560806661844254,\n  0.04293643310666084,\n  0.042316365987062454,\n  0.041700609028339386,\n  0.041089169681072235,\n  0.0404820553958416,\n  0.039879269897937775,\n  0.03928082063794136,\n  0.038686711341142654,\n  0.03809694945812225,\n  0.037511538714170456,\n  0.03693048655986786,\n  0.03635379299521446,\n  0.03578147292137146,\n  0.03521352261304855,\n  0.03464995324611664,\n  0.03409076854586601,\n  0.033535972237586975,\n  0.03298557177186012,\n  0.032439570873975754,\n  0.03189797326922417,\n  0.03136079013347626,\n  0.030828017741441727,\n  0.03029966913163662,\n  0.029775744304060936,\n  0.029256248846650124,\n  0.02874119020998478,\n  0.028230570256710052,\n  0.02772439643740654,\n  0.02722267247736454,\n  0.02672540210187435,\n  0.026232589036226273,\n  0.02574424259364605,\n  0.025260362774133682,\n  0.02478095516562462,\n  0.024306025356054306,\n  0.023835578933358192,\n  0.023369617760181427,\n  0.022908145561814308,\n  0.022451169788837433,\n  0.0219986941665411,\n  0.021550720557570457,\n  0.021107254549860954,\n  0.020668301731348038,\n  0.020233863964676857,\n  0.01980394683778286,\n  0.019378554075956345,\n  0.01895768940448761,\n  0.018541356548666954,\n  0.018129559233784676,\n  0.017722303047776222,\n  0.017319589853286743,\n  0.016921425238251686,\n  0.0165278110653162,\n  0.016138752922415733,\n  0.015754252672195435,\n  0.015374314971268177,\n  0.01499894354492426,\n  0.014628141187131405,\n  0.014261912554502487,\n  0.013900259509682655,\n  0.013543186709284782,\n  0.013190696947276592,\n  0.012842793017625809,\n  0.012499479576945305,\n  0.012160759419202805,\n  0.011826635338366032,\n  0.01149711012840271,\n  0.011172188445925713,\n  0.010851871222257614,\n  0.010536163114011288,\n  0.010225065983831882,\n  0.009918583557009697,\n  0.009616718627512455,\n  0.00931947398930788,\n  0.009026852436363697,\n  0.008738855831325054,\n  0.00845548789948225,\n  0.008176751434803009,\n  0.007902649231255054,\n  0.0076331826858222485,\n  0.007368355058133602,\n  0.007108168676495552,\n  0.006852626334875822,\n  0.006601730361580849,\n  0.006355482619255781,\n  0.006113885901868343,\n  0.005876942537724972,\n  0.005644654855132103,\n  0.005417024251073599,\n  0.005194053519517183,\n  0.0049757445231080055,\n  0.004762100055813789,\n  0.0045531210489571095,\n  0.004348809830844402,\n  0.004149168264120817,\n  0.003954199142754078,\n  0.003763902932405472,\n  0.003578282194212079,\n  0.0033973385579884052,\n  0.003221073653548956,\n  0.0030494893435388803,\n  0.002882586792111397,\n  0.002720368094742298,\n  0.0025628346484154463,\n  0.0024099876172840595,\n  0.002261828863993287,\n  0.0021183595526963472,\n  0.001979581080377102,\n  0.0018454946111887693,\n  0.0017161016585305333,\n  0.0015914032701402903,\n  0.0014714007265865803,\n  0.0013560950756072998,\n  0.0012454874813556671,\n  0.0011395788751542568,\n  0.0010383703047409654,\n  0.0009418628178536892,\n  0.0008500572293996811,\n  0.0007629544124938548,\n  0.000680555182043463,\n  0.0006028603529557586,\n  0.0005298706237226725,\n  0.0004615867219399661,\n  0.00039800922968424857,\n  0.00033913878723978996,\n  0.0002849759184755385,\n  0.00023552117636427283,\n  0.00019077499746344984,\n  0.00015073781833052635,\n  0.00011540999548742548,\n  8.47918854560703e-05,\n  5.888376108487137e-05,\n  3.7685873394366354e-05,\n  2.1198420654400252e-05,\n  9.421557479072362e-06,\n  2.355394826736301e-06,\n  0\n]\n"
  },
  {
    "path": "__tests__/data/hanning256.json",
    "content": "[\n  0,\n  0.00015177401655819267,\n  0.0006070039235055447,\n  0.0013654133072122931,\n  0.0024265418760478497,\n  0.003789745271205902,\n  0.005454195663332939,\n  0.007418883498758078,\n  0.009682614356279373,\n  0.01224401593208313,\n  0.015101531520485878,\n  0.018253426998853683,\n  0.021697789430618286,\n  0.0254325270652771,\n  0.02945537306368351,\n  0.033763885498046875,\n  0.038355447351932526,\n  0.04322727024555206,\n  0.04837640002369881,\n  0.05379970744252205,\n  0.05949390307068825,\n  0.06545552611351013,\n  0.0716809630393982,\n  0.0781664252281189,\n  0.08490798622369766,\n  0.09190154075622559,\n  0.09914285689592361,\n  0.10662753134965897,\n  0.11435101926326752,\n  0.1223086342215538,\n  0.13049554824829102,\n  0.13890677690505981,\n  0.1475372314453125,\n  0.15638165175914764,\n  0.16543470323085785,\n  0.174690842628479,\n  0.1841444969177246,\n  0.19378989934921265,\n  0.20362119376659393,\n  0.21363243460655212,\n  0.22381751239299774,\n  0.23417027294635773,\n  0.2446843981742859,\n  0.25535354018211365,\n  0.2661712169647217,\n  0.2771308124065399,\n  0.2882257401943207,\n  0.29944923520088196,\n  0.310794472694397,\n  0.32225459814071655,\n  0.3338226079940796,\n  0.345491498708725,\n  0.3572542071342468,\n  0.3691035807132721,\n  0.38103240728378296,\n  0.3930334448814392,\n  0.40509945154190063,\n  0.4172230660915375,\n  0.42939692735671997,\n  0.44161364436149597,\n  0.45386582612991333,\n  0.46614599227905273,\n  0.47844672203063965,\n  0.49076053500175476,\n  0.5030799508094788,\n  0.5153975486755371,\n  0.527705729007721,\n  0.5399971008300781,\n  0.5522642135620117,\n  0.5644996166229248,\n  0.5766957998275757,\n  0.5888454914093018,\n  0.6009411811828613,\n  0.6129756569862366,\n  0.6249414682388306,\n  0.636831521987915,\n  0.6486384272575378,\n  0.6603550910949707,\n  0.6719744801521301,\n  0.6834893822669983,\n  0.694892942905426,\n  0.7061781883239746,\n  0.7173382043838501,\n  0.7283663153648376,\n  0.7392557859420776,\n  0.75,\n  0.7605924606323242,\n  0.7710266709327698,\n  0.7812963724136353,\n  0.7913953065872192,\n  0.8013173341751099,\n  0.8110564351081848,\n  0.8206066489219666,\n  0.8299622535705566,\n  0.8391175866127014,\n  0.8480669856071472,\n  0.8568050861358643,\n  0.8653265833854675,\n  0.8736262917518616,\n  0.8816991448402405,\n  0.8895403146743774,\n  0.8971449732780457,\n  0.9045084714889526,\n  0.9116264581680298,\n  0.9184945821762085,\n  0.9251085519790649,\n  0.9314644932746887,\n  0.9375584721565247,\n  0.9433868527412415,\n  0.9489459991455078,\n  0.9542326331138611,\n  0.9592434763908386,\n  0.9639755487442017,\n  0.9684259295463562,\n  0.9725919365882874,\n  0.9764710068702698,\n  0.9800608158111572,\n  0.9833592176437378,\n  0.9863641262054443,\n  0.9890738129615784,\n  0.9914865493774414,\n  0.9936009049415588,\n  0.9954156279563904,\n  0.9969295859336853,\n  0.9981418251991272,\n  0.9990516901016235,\n  0.9996585249900818,\n  0.9999620318412781,\n  0.9999620318412781,\n  0.9996585249900818,\n  0.9990516901016235,\n  0.9981418251991272,\n  0.9969295859336853,\n  0.9954156279563904,\n  0.9936009049415588,\n  0.9914865493774414,\n  0.9890738129615784,\n  0.9863641262054443,\n  0.9833592176437378,\n  0.9800608158111572,\n  0.9764710068702698,\n  0.9725919365882874,\n  0.9684259295463562,\n  0.9639755487442017,\n  0.9592434763908386,\n  0.9542326331138611,\n  0.9489459991455078,\n  0.9433868527412415,\n  0.9375584721565247,\n  0.9314644932746887,\n  0.9251085519790649,\n  0.9184945821762085,\n  0.9116264581680298,\n  0.9045084714889526,\n  0.8971449732780457,\n  0.8895403146743774,\n  0.8816991448402405,\n  0.8736262917518616,\n  0.8653265833854675,\n  0.8568050861358643,\n  0.8480669856071472,\n  0.8391175866127014,\n  0.8299622535705566,\n  0.8206066489219666,\n  0.8110564351081848,\n  0.8013173341751099,\n  0.7913953065872192,\n  0.7812963724136353,\n  0.7710266709327698,\n  0.7605924606323242,\n  0.75,\n  0.7392557859420776,\n  0.7283663153648376,\n  0.7173382043838501,\n  0.7061781883239746,\n  0.694892942905426,\n  0.6834893822669983,\n  0.6719744801521301,\n  0.6603550910949707,\n  0.6486384272575378,\n  0.636831521987915,\n  0.6249414682388306,\n  0.6129756569862366,\n  0.6009411811828613,\n  0.5888454914093018,\n  0.5766957998275757,\n  0.5644996166229248,\n  0.5522642135620117,\n  0.5399971008300781,\n  0.527705729007721,\n  0.5153975486755371,\n  0.5030799508094788,\n  0.49076053500175476,\n  0.47844672203063965,\n  0.46614599227905273,\n  0.45386582612991333,\n  0.44161364436149597,\n  0.42939692735671997,\n  0.4172230660915375,\n  0.40509945154190063,\n  0.3930334448814392,\n  0.38103240728378296,\n  0.3691035807132721,\n  0.3572542071342468,\n  0.345491498708725,\n  0.3338226079940796,\n  0.32225459814071655,\n  0.310794472694397,\n  0.29944923520088196,\n  0.2882257401943207,\n  0.2771308124065399,\n  0.2661712169647217,\n  0.25535354018211365,\n  0.2446843981742859,\n  0.23417027294635773,\n  0.22381751239299774,\n  0.21363243460655212,\n  0.20362119376659393,\n  0.19378989934921265,\n  0.1841444969177246,\n  0.174690842628479,\n  0.16543470323085785,\n  0.15638165175914764,\n  0.1475372314453125,\n  0.13890677690505981,\n  0.13049554824829102,\n  0.1223086342215538,\n  0.11435101926326752,\n  0.10662753134965897,\n  0.09914285689592361,\n  0.09190154075622559,\n  0.08490798622369766,\n  0.0781664252281189,\n  0.0716809630393982,\n  0.06545552611351013,\n  0.05949390307068825,\n  0.05379970744252205,\n  0.04837640002369881,\n  0.04322727024555206,\n  0.038355447351932526,\n  0.033763885498046875,\n  0.02945537306368351,\n  0.0254325270652771,\n  0.021697789430618286,\n  0.018253426998853683,\n  0.015101531520485878,\n  0.01224401593208313,\n  0.009682614356279373,\n  0.007418883498758078,\n  0.005454195663332939,\n  0.003789745271205902,\n  0.0024265418760478497,\n  0.0013654133072122931,\n  0.0006070039235055447,\n  0.00015177401655819267,\n  0\n]\n"
  },
  {
    "path": "__tests__/data/hanning512.json",
    "content": "[\n  0,\n  3.7796577089466155e-05,\n  0.00015118058945517987,\n  0.0003401349240448326,\n  0.0006046309717930853,\n  0.0009446287294849753,\n  0.0013600768288597465,\n  0.0018509125802665949,\n  0.0024170614778995514,\n  0.003058438189327717,\n  0.0037749456241726875,\n  0.004566475749015808,\n  0.005432908423244953,\n  0.006374112796038389,\n  0.007389946840703487,\n  0.008480256423354149,\n  0.009644877165555954,\n  0.0108836330473423,\n  0.01219633687287569,\n  0.013582789339125156,\n  0.015042781829833984,\n  0.016576092690229416,\n  0.01818249188363552,\n  0.0198617335408926,\n  0.02161356620490551,\n  0.023437725380063057,\n  0.025333933532238007,\n  0.027301903814077377,\n  0.02934134192764759,\n  0.031451936811208725,\n  0.03363336622714996,\n  0.03588530793786049,\n  0.038207415491342545,\n  0.040599338710308075,\n  0.04306071996688843,\n  0.04559118300676346,\n  0.048190344125032425,\n  0.05085781589150429,\n  0.053593188524246216,\n  0.05639605596661568,\n  0.05926598608493805,\n  0.06220255047082901,\n  0.06520530581474304,\n  0.06827379763126373,\n  0.07140755653381348,\n  0.07460611313581467,\n  0.0778689831495285,\n  0.08119567483663559,\n  0.08458568155765533,\n  0.08803849667310715,\n  0.09155359119176865,\n  0.09513044357299805,\n  0.09876850247383118,\n  0.10246722400188446,\n  0.10622604191303253,\n  0.11004439741373062,\n  0.11392170935869217,\n  0.11785738915205002,\n  0.12185084074735641,\n  0.1259014755487442,\n  0.13000865280628204,\n  0.1341717690229416,\n  0.1383902132511139,\n  0.14266330003738403,\n  0.14699043333530426,\n  0.15137092769145966,\n  0.1558041274547577,\n  0.16028937697410583,\n  0.16482597589492798,\n  0.1694132536649704,\n  0.1740504950284958,\n  0.17873702943325043,\n  0.183472141623497,\n  0.18825510144233704,\n  0.1930851936340332,\n  0.197961688041687,\n  0.20288383960723877,\n  0.20785091817378998,\n  0.21286216378211975,\n  0.2179168164730072,\n  0.22301411628723145,\n  0.2281533032655716,\n  0.23333357274532318,\n  0.23855416476726532,\n  0.24381428956985474,\n  0.24911314249038696,\n  0.2544499337673187,\n  0.25982382893562317,\n  0.2652340531349182,\n  0.270679771900177,\n  0.2761601507663727,\n  0.2816743850708008,\n  0.28722161054611206,\n  0.29280102252960205,\n  0.2984117567539215,\n  0.3040529489517212,\n  0.30972379446029663,\n  0.3154233694076538,\n  0.32115086913108826,\n  0.32690542936325073,\n  0.3326861262321472,\n  0.33849215507507324,\n  0.3443225622177124,\n  0.35017651319503784,\n  0.3560531437397003,\n  0.3619515001773834,\n  0.3678707480430603,\n  0.3738099932670593,\n  0.3797682821750641,\n  0.38574475049972534,\n  0.39173850417137146,\n  0.3977486193180084,\n  0.4037742018699646,\n  0.40981432795524597,\n  0.4158681035041809,\n  0.421934574842453,\n  0.4280128479003906,\n  0.43410202860832214,\n  0.44020116329193115,\n  0.44630932807922363,\n  0.45242562890052795,\n  0.4585490822792053,\n  0.4646788537502289,\n  0.47081393003463745,\n  0.4769534170627594,\n  0.4830964207649231,\n  0.48924195766448975,\n  0.49538910388946533,\n  0.5015369653701782,\n  0.507684588432312,\n  0.5138310790061951,\n  0.519975483417511,\n  0.5261167883872986,\n  0.5322542190551758,\n  0.5383867621421814,\n  0.544513463973999,\n  0.5506334900856018,\n  0.5567458271980286,\n  0.5628495812416077,\n  0.5689438581466675,\n  0.5750277042388916,\n  0.5811002254486084,\n  0.5871604084968567,\n  0.5932074785232544,\n  0.5992404818534851,\n  0.6052584052085876,\n  0.6112604737281799,\n  0.6172456741333008,\n  0.6232131719589233,\n  0.629162073135376,\n  0.6350914239883423,\n  0.6410003304481506,\n  0.6468879580497742,\n  0.6527533531188965,\n  0.658595621585846,\n  0.6644139885902405,\n  0.6702074408531189,\n  0.6759752035140991,\n  0.6817163228988647,\n  0.6874299645423889,\n  0.6931152939796448,\n  0.6987714171409607,\n  0.7043974995613098,\n  0.7099926471710205,\n  0.7155560851097107,\n  0.7210869193077087,\n  0.7265843152999878,\n  0.732047438621521,\n  0.7374755144119263,\n  0.7428677082061768,\n  0.7482231259346008,\n  0.7535410523414612,\n  0.758820652961731,\n  0.7640610933303833,\n  0.7692616581916809,\n  0.7744214534759521,\n  0.7795398235321045,\n  0.7846158742904663,\n  0.7896489500999451,\n  0.7946382164955139,\n  0.7995828986167908,\n  0.8044823408126831,\n  0.8093357086181641,\n  0.8141423463821411,\n  0.8189014196395874,\n  0.8236123323440552,\n  0.8282743096351624,\n  0.8328866958618164,\n  0.8374487161636353,\n  0.8419597148895264,\n  0.8464190363883972,\n  0.8508259654045105,\n  0.8551798462867737,\n  0.8594800233840942,\n  0.8637259006500244,\n  0.8679167628288269,\n  0.8720519542694092,\n  0.8761309385299683,\n  0.8801530599594116,\n  0.8841177225112915,\n  0.8880242705345154,\n  0.8918721675872803,\n  0.8956608176231384,\n  0.8993896842002869,\n  0.9030581712722778,\n  0.9066656827926636,\n  0.9102116823196411,\n  0.913695752620697,\n  0.917117178440094,\n  0.9204756021499634,\n  0.9237704873085022,\n  0.9270012378692627,\n  0.9301674365997314,\n  0.933268666267395,\n  0.9363043308258057,\n  0.93927401304245,\n  0.9421773552894592,\n  0.9450137615203857,\n  0.9477829337120056,\n  0.9504844546318054,\n  0.9531177878379822,\n  0.955682635307312,\n  0.9581786394119263,\n  0.9606053233146667,\n  0.9629623889923096,\n  0.9652494788169861,\n  0.9674661755561829,\n  0.9696122407913208,\n  0.9716873168945312,\n  0.9736910462379456,\n  0.9756231307983398,\n  0.9774833917617798,\n  0.979271411895752,\n  0.9809869527816772,\n  0.9826298356056213,\n  0.9841997027397156,\n  0.9856963753700256,\n  0.9871196150779724,\n  0.9884692430496216,\n  0.989745020866394,\n  0.9909467101097107,\n  0.992074191570282,\n  0.9931272864341736,\n  0.9941058158874512,\n  0.9950096607208252,\n  0.9958386421203613,\n  0.9965927004814148,\n  0.9972716569900513,\n  0.9978753924369812,\n  0.9984039068222046,\n  0.9988570809364319,\n  0.9992347955703735,\n  0.9995370507240295,\n  0.9997637867927551,\n  0.9999149441719055,\n  0.9999905228614807,\n  0.9999905228614807,\n  0.9999149441719055,\n  0.9997637867927551,\n  0.9995370507240295,\n  0.9992347955703735,\n  0.9988570809364319,\n  0.9984039068222046,\n  0.9978753924369812,\n  0.9972716569900513,\n  0.9965927004814148,\n  0.9958386421203613,\n  0.9950096607208252,\n  0.9941058158874512,\n  0.9931272864341736,\n  0.992074191570282,\n  0.9909467101097107,\n  0.989745020866394,\n  0.9884692430496216,\n  0.9871196150779724,\n  0.9856963753700256,\n  0.9841997027397156,\n  0.9826298356056213,\n  0.9809869527816772,\n  0.979271411895752,\n  0.9774833917617798,\n  0.9756231307983398,\n  0.9736910462379456,\n  0.9716873168945312,\n  0.9696122407913208,\n  0.9674661755561829,\n  0.9652494788169861,\n  0.9629623889923096,\n  0.9606053233146667,\n  0.9581786394119263,\n  0.955682635307312,\n  0.9531177878379822,\n  0.9504844546318054,\n  0.9477829337120056,\n  0.9450137615203857,\n  0.9421773552894592,\n  0.93927401304245,\n  0.9363043308258057,\n  0.933268666267395,\n  0.9301674365997314,\n  0.9270012378692627,\n  0.9237704873085022,\n  0.9204756021499634,\n  0.917117178440094,\n  0.913695752620697,\n  0.9102116823196411,\n  0.9066656827926636,\n  0.9030581712722778,\n  0.8993896842002869,\n  0.8956608176231384,\n  0.8918721675872803,\n  0.8880242705345154,\n  0.8841177225112915,\n  0.8801530599594116,\n  0.8761309385299683,\n  0.8720519542694092,\n  0.8679167628288269,\n  0.8637259006500244,\n  0.8594800233840942,\n  0.8551798462867737,\n  0.8508259654045105,\n  0.8464190363883972,\n  0.8419597148895264,\n  0.8374487161636353,\n  0.8328866958618164,\n  0.8282743096351624,\n  0.8236123323440552,\n  0.8189014196395874,\n  0.8141423463821411,\n  0.8093357086181641,\n  0.8044823408126831,\n  0.7995828986167908,\n  0.7946382164955139,\n  0.7896489500999451,\n  0.7846158742904663,\n  0.7795398235321045,\n  0.7744214534759521,\n  0.7692616581916809,\n  0.7640610933303833,\n  0.758820652961731,\n  0.7535410523414612,\n  0.7482231259346008,\n  0.7428677082061768,\n  0.7374755144119263,\n  0.732047438621521,\n  0.7265843152999878,\n  0.7210869193077087,\n  0.7155560851097107,\n  0.7099926471710205,\n  0.7043974995613098,\n  0.6987714171409607,\n  0.6931152939796448,\n  0.6874299645423889,\n  0.6817163228988647,\n  0.6759752035140991,\n  0.6702074408531189,\n  0.6644139885902405,\n  0.658595621585846,\n  0.6527533531188965,\n  0.6468879580497742,\n  0.6410003304481506,\n  0.6350914239883423,\n  0.629162073135376,\n  0.6232131719589233,\n  0.6172456741333008,\n  0.6112604737281799,\n  0.6052584052085876,\n  0.5992404818534851,\n  0.5932074785232544,\n  0.5871604084968567,\n  0.5811002254486084,\n  0.5750277042388916,\n  0.5689438581466675,\n  0.5628495812416077,\n  0.5567458271980286,\n  0.5506334900856018,\n  0.544513463973999,\n  0.5383867621421814,\n  0.5322542190551758,\n  0.5261167883872986,\n  0.519975483417511,\n  0.5138310790061951,\n  0.507684588432312,\n  0.5015369653701782,\n  0.49538910388946533,\n  0.48924195766448975,\n  0.4830964207649231,\n  0.4769534170627594,\n  0.47081393003463745,\n  0.4646788537502289,\n  0.4585490822792053,\n  0.45242562890052795,\n  0.44630932807922363,\n  0.44020116329193115,\n  0.43410202860832214,\n  0.4280128479003906,\n  0.421934574842453,\n  0.4158681035041809,\n  0.40981432795524597,\n  0.4037742018699646,\n  0.3977486193180084,\n  0.39173850417137146,\n  0.38574475049972534,\n  0.3797682821750641,\n  0.3738099932670593,\n  0.3678707480430603,\n  0.3619515001773834,\n  0.3560531437397003,\n  0.35017651319503784,\n  0.3443225622177124,\n  0.33849215507507324,\n  0.3326861262321472,\n  0.32690542936325073,\n  0.32115086913108826,\n  0.3154233694076538,\n  0.30972379446029663,\n  0.3040529489517212,\n  0.2984117567539215,\n  0.29280102252960205,\n  0.28722161054611206,\n  0.2816743850708008,\n  0.2761601507663727,\n  0.270679771900177,\n  0.2652340531349182,\n  0.25982382893562317,\n  0.2544499337673187,\n  0.24911314249038696,\n  0.24381428956985474,\n  0.23855416476726532,\n  0.23333357274532318,\n  0.2281533032655716,\n  0.22301411628723145,\n  0.2179168164730072,\n  0.21286216378211975,\n  0.20785091817378998,\n  0.20288383960723877,\n  0.197961688041687,\n  0.1930851936340332,\n  0.18825510144233704,\n  0.183472141623497,\n  0.17873702943325043,\n  0.1740504950284958,\n  0.1694132536649704,\n  0.16482597589492798,\n  0.16028937697410583,\n  0.1558041274547577,\n  0.15137092769145966,\n  0.14699043333530426,\n  0.14266330003738403,\n  0.1383902132511139,\n  0.1341717690229416,\n  0.13000865280628204,\n  0.1259014755487442,\n  0.12185084074735641,\n  0.11785738915205002,\n  0.11392170935869217,\n  0.11004439741373062,\n  0.10622604191303253,\n  0.10246722400188446,\n  0.09876850247383118,\n  0.09513044357299805,\n  0.09155359119176865,\n  0.08803849667310715,\n  0.08458568155765533,\n  0.08119567483663559,\n  0.0778689831495285,\n  0.07460611313581467,\n  0.07140755653381348,\n  0.06827379763126373,\n  0.06520530581474304,\n  0.06220255047082901,\n  0.05926598608493805,\n  0.05639605596661568,\n  0.053593188524246216,\n  0.05085781589150429,\n  0.048190344125032425,\n  0.04559118300676346,\n  0.04306071996688843,\n  0.040599338710308075,\n  0.038207415491342545,\n  0.03588530793786049,\n  0.03363336622714996,\n  0.031451936811208725,\n  0.02934134192764759,\n  0.027301903814077377,\n  0.025333933532238007,\n  0.023437725380063057,\n  0.02161356620490551,\n  0.0198617335408926,\n  0.01818249188363552,\n  0.016576092690229416,\n  0.015042781829833984,\n  0.013582789339125156,\n  0.01219633687287569,\n  0.0108836330473423,\n  0.009644877165555954,\n  0.008480256423354149,\n  0.007389946840703487,\n  0.006374112796038389,\n  0.005432908423244953,\n  0.004566475749015808,\n  0.0037749456241726875,\n  0.003058438189327717,\n  0.0024170614778995514,\n  0.0018509125802665949,\n  0.0013600768288597465,\n  0.0009446287294849753,\n  0.0006046309717930853,\n  0.0003401349240448326,\n  0.00015118058945517987,\n  3.7796577089466155e-05,\n  0\n]\n"
  },
  {
    "path": "__tests__/data/sine1024.json",
    "content": "[\n  0,\n  0.003070955630391836,\n  0.006141882389783859,\n  0.009212750941514969,\n  0.01228353288024664,\n  0.015354199334979057,\n  0.01842472143471241,\n  0.021495068445801735,\n  0.024565212428569794,\n  0.027635125443339348,\n  0.03070477955043316,\n  0.03377414122223854,\n  0.0368431881070137,\n  0.03991188481450081,\n  0.04298020526766777,\n  0.0460481196641922,\n  0.04911560192704201,\n  0.05218261852860451,\n  0.05524914339184761,\n  0.05831514671444893,\n  0.06138060241937637,\n  0.06444548070430756,\n  0.06750974804162979,\n  0.07057337462902069,\n  0.07363634556531906,\n  0.07669861614704132,\n  0.07976016402244568,\n  0.08282095938920975,\n  0.08588097244501114,\n  0.08894018083810806,\n  0.09199854731559753,\n  0.09505604207515717,\n  0.09811264276504517,\n  0.10116831958293915,\n  0.10422304272651672,\n  0.1072767823934555,\n  0.1103295087814331,\n  0.11338119953870773,\n  0.1164318174123764,\n  0.11948134005069733,\n  0.12252973020076752,\n  0.12557697296142578,\n  0.12862302362918854,\n  0.1316678673028946,\n  0.13471145927906036,\n  0.13775378465652466,\n  0.1407948136329651,\n  0.14383451640605927,\n  0.1468728631734848,\n  0.1499098241329193,\n  0.1529453694820404,\n  0.1559794694185257,\n  0.159012109041214,\n  0.1620432436466217,\n  0.16507284343242645,\n  0.16810089349746704,\n  0.17112736403942108,\n  0.174152210354805,\n  0.17717541754245758,\n  0.18019694089889526,\n  0.18321678042411804,\n  0.18623489141464233,\n  0.18925124406814575,\n  0.1922658085823059,\n  0.1952785700559616,\n  0.19828948378562927,\n  0.2012985199689865,\n  0.20430566370487213,\n  0.20731088519096375,\n  0.21031413972377777,\n  0.2133154273033142,\n  0.21631468832492828,\n  0.21931192278862,\n  0.22230707108974457,\n  0.225300133228302,\n  0.2282910794019699,\n  0.2312798649072647,\n  0.234266459941864,\n  0.23725084960460663,\n  0.24023300409317017,\n  0.24321290850639343,\n  0.24619050323963165,\n  0.24916577339172363,\n  0.2521387040615082,\n  0.2551092505455017,\n  0.25807738304138184,\n  0.26104310154914856,\n  0.2640063464641571,\n  0.2669670879840851,\n  0.2699253261089325,\n  0.27288103103637695,\n  0.2758341431617737,\n  0.2787846624851227,\n  0.28173255920410156,\n  0.28467780351638794,\n  0.28762033581733704,\n  0.29056015610694885,\n  0.2934972643852234,\n  0.29643160104751587,\n  0.2993631362915039,\n  0.3022918403148651,\n  0.3052176833152771,\n  0.30814066529273987,\n  0.31106072664260864,\n  0.3139778673648834,\n  0.3168920576572418,\n  0.31980323791503906,\n  0.32271140813827515,\n  0.3256165385246277,\n  0.3285185992717743,\n  0.3314175605773926,\n  0.33431339263916016,\n  0.337206095457077,\n  0.340095579624176,\n  0.34298187494277954,\n  0.3458649516105652,\n  0.3487447500228882,\n  0.35162124037742615,\n  0.35449445247650146,\n  0.357364296913147,\n  0.36023077368736267,\n  0.36309385299682617,\n  0.3659535050392151,\n  0.3688097298145294,\n  0.3716624677181244,\n  0.3745116889476776,\n  0.3773573637008667,\n  0.38019949197769165,\n  0.3830380439758301,\n  0.3858729898929596,\n  0.3887042999267578,\n  0.39153191447257996,\n  0.3943558633327484,\n  0.3971760869026184,\n  0.39999255537986755,\n  0.40280523896217346,\n  0.40561413764953613,\n  0.4084192216396332,\n  0.4112204611301422,\n  0.41401779651641846,\n  0.4168112576007843,\n  0.4196007549762726,\n  0.4223863184452057,\n  0.42516788840293884,\n  0.42794543504714966,\n  0.43071895837783813,\n  0.4334884285926819,\n  0.4362538158893585,\n  0.43901506066322327,\n  0.4417721927165985,\n  0.4445251524448395,\n  0.4472739100456238,\n  0.4500184655189514,\n  0.4527587592601776,\n  0.45549479126930237,\n  0.4582265317440033,\n  0.4609539210796356,\n  0.46367698907852173,\n  0.46639570593833923,\n  0.46910998225212097,\n  0.47181984782218933,\n  0.4745252728462219,\n  0.47722622752189636,\n  0.47992268204689026,\n  0.4826146066188812,\n  0.4853019714355469,\n  0.4879847466945648,\n  0.49066293239593506,\n  0.4933364987373352,\n  0.49600541591644287,\n  0.49866965413093567,\n  0.5013291835784912,\n  0.5039839744567871,\n  0.506633996963501,\n  0.5092793107032776,\n  0.5119197368621826,\n  0.5145553946495056,\n  0.517186164855957,\n  0.5198121070861816,\n  0.5224331021308899,\n  0.5250492095947266,\n  0.5276603102684021,\n  0.5302664637565613,\n  0.5328676104545593,\n  0.5354637503623962,\n  0.5380548238754272,\n  0.5406408309936523,\n  0.5432217121124268,\n  0.5457975268363953,\n  0.5483681559562683,\n  0.5509335994720459,\n  0.553493857383728,\n  0.5560489296913147,\n  0.5585986971855164,\n  0.5611432194709778,\n  0.563682496547699,\n  0.5662164092063904,\n  0.5687450170516968,\n  0.5712682008743286,\n  0.5737860202789307,\n  0.5762984752655029,\n  0.5788054466247559,\n  0.5813069939613342,\n  0.5838030576705933,\n  0.5862935781478882,\n  0.5887786149978638,\n  0.5912580490112305,\n  0.5937319397926331,\n  0.5962002277374268,\n  0.5986628532409668,\n  0.601119875907898,\n  0.6035712361335754,\n  0.6060168743133545,\n  0.6084568500518799,\n  0.6108910441398621,\n  0.613319456577301,\n  0.6157421469688416,\n  0.6181589961051941,\n  0.6205700039863586,\n  0.6229751706123352,\n  0.625374436378479,\n  0.6277678608894348,\n  0.6301553249359131,\n  0.6325368881225586,\n  0.6349124312400818,\n  0.6372820138931274,\n  0.6396455764770508,\n  0.6420031189918518,\n  0.6443545818328857,\n  0.6466999650001526,\n  0.6490393280982971,\n  0.651372492313385,\n  0.653699517250061,\n  0.6560204029083252,\n  0.6583350896835327,\n  0.6606435775756836,\n  0.6629458069801331,\n  0.6652418375015259,\n  0.6675315499305725,\n  0.669814944267273,\n  0.672092080116272,\n  0.67436283826828,\n  0.6766272783279419,\n  0.678885281085968,\n  0.681136965751648,\n  0.6833821535110474,\n  0.685620903968811,\n  0.687853217124939,\n  0.6900790333747864,\n  0.6922982931137085,\n  0.6945110559463501,\n  0.6967173218727112,\n  0.6989169716835022,\n  0.7011100053787231,\n  0.7032964825630188,\n  0.7054762840270996,\n  0.7076494693756104,\n  0.7098159193992615,\n  0.7119757533073425,\n  0.7141287922859192,\n  0.716275155544281,\n  0.7184147238731384,\n  0.7205475568771362,\n  0.7226735949516296,\n  0.7247927784919739,\n  0.7269051671028137,\n  0.7290106415748596,\n  0.7311093211174011,\n  0.7332010269165039,\n  0.7352858781814575,\n  0.7373637557029724,\n  0.7394347190856934,\n  0.7414987087249756,\n  0.7435556650161743,\n  0.7456056475639343,\n  0.7476485371589661,\n  0.7496844530105591,\n  0.751713216304779,\n  0.7537349462509155,\n  0.7557495832443237,\n  0.7577570676803589,\n  0.759757399559021,\n  0.7617505788803101,\n  0.7637365460395813,\n  0.7657153606414795,\n  0.7676869034767151,\n  0.7696512341499329,\n  0.771608293056488,\n  0.7735580801963806,\n  0.7755005955696106,\n  0.7774357795715332,\n  0.7793636322021484,\n  0.7812840938568115,\n  0.7831972241401672,\n  0.7851030230522156,\n  0.7870013117790222,\n  0.7888922691345215,\n  0.790775716304779,\n  0.7926517724990845,\n  0.7945203185081482,\n  0.7963813543319702,\n  0.7982348799705505,\n  0.8000808954238892,\n  0.8019194006919861,\n  0.8037502765655518,\n  0.8055736422538757,\n  0.8073893189430237,\n  0.8091974854469299,\n  0.8109979629516602,\n  0.8127908110618591,\n  0.8145759701728821,\n  0.816353440284729,\n  0.8181232213973999,\n  0.8198853135108948,\n  0.8216396570205688,\n  0.8233862519264221,\n  0.8251250386238098,\n  0.8268561363220215,\n  0.8285793662071228,\n  0.8302947878837585,\n  0.8320024013519287,\n  0.8337021470069885,\n  0.835394024848938,\n  0.8370780348777771,\n  0.8387541770935059,\n  0.8404223918914795,\n  0.842082679271698,\n  0.8437350392341614,\n  0.8453794121742249,\n  0.8470158576965332,\n  0.8486442565917969,\n  0.8502646684646606,\n  0.8518770933151245,\n  0.8534814715385437,\n  0.8550778031349182,\n  0.8566660284996033,\n  0.8582462072372437,\n  0.8598182797431946,\n  0.861382246017456,\n  0.8629381060600281,\n  0.8644858598709106,\n  0.8660253882408142,\n  0.8675568103790283,\n  0.8690800070762634,\n  0.8705950379371643,\n  0.8721018433570862,\n  0.873600423336029,\n  0.8750907778739929,\n  0.876572847366333,\n  0.8780466914176941,\n  0.8795121908187866,\n  0.8809694647789001,\n  0.8824183940887451,\n  0.8838590383529663,\n  0.8852912783622742,\n  0.8867152333259583,\n  0.888130784034729,\n  0.8895379900932312,\n  0.8909367918968201,\n  0.8923271894454956,\n  0.8937091827392578,\n  0.8950827717781067,\n  0.8964478969573975,\n  0.8978045582771301,\n  0.8991527557373047,\n  0.9004924297332764,\n  0.9018236994743347,\n  0.9031463861465454,\n  0.904460608959198,\n  0.9057662487030029,\n  0.9070634245872498,\n  0.9083519577980042,\n  0.9096319675445557,\n  0.9109034538269043,\n  0.9121662974357605,\n  0.9134204983711243,\n  0.9146661162376404,\n  0.9159031510353088,\n  0.9171314835548401,\n  0.9183511734008789,\n  0.9195622801780701,\n  0.9207646250724792,\n  0.921958327293396,\n  0.9231433272361755,\n  0.9243196249008179,\n  0.925487220287323,\n  0.9266460537910461,\n  0.9277961850166321,\n  0.9289374947547913,\n  0.9300701022148132,\n  0.9311939477920532,\n  0.9323089718818665,\n  0.9334152340888977,\n  0.9345126748085022,\n  0.9356013536453247,\n  0.9366811513900757,\n  0.9377521276473999,\n  0.9388142824172974,\n  0.9398675560951233,\n  0.9409119486808777,\n  0.9419475197792053,\n  0.9429742097854614,\n  0.9439919590950012,\n  0.9450008273124695,\n  0.9460007548332214,\n  0.9469918012619019,\n  0.947973906993866,\n  0.9489470720291138,\n  0.9499112963676453,\n  0.9508665204048157,\n  0.9518128037452698,\n  0.9527501463890076,\n  0.9536784887313843,\n  0.9545977711677551,\n  0.9555081129074097,\n  0.9564094543457031,\n  0.9573017358779907,\n  0.9581850171089172,\n  0.9590592384338379,\n  0.9599244594573975,\n  0.9607805609703064,\n  0.9616276621818542,\n  0.9624656438827515,\n  0.9632945656776428,\n  0.9641144275665283,\n  0.9649251699447632,\n  0.9657268524169922,\n  0.9665193557739258,\n  0.9673027992248535,\n  0.9680771231651306,\n  0.9688422679901123,\n  0.9695983529090881,\n  0.9703452587127686,\n  0.9710829854011536,\n  0.9718115925788879,\n  0.9725310206413269,\n  0.9732412695884705,\n  0.9739423394203186,\n  0.9746342301368713,\n  0.9753168821334839,\n  0.9759904146194458,\n  0.9766547083854675,\n  0.9773097634315491,\n  0.9779556393623352,\n  0.9785922765731812,\n  0.9792196750640869,\n  0.9798378944396973,\n  0.9804468154907227,\n  0.9810464978218079,\n  0.9816369414329529,\n  0.9822181463241577,\n  0.9827900528907776,\n  0.9833527207374573,\n  0.983906090259552,\n  0.9844501614570618,\n  0.9849849939346313,\n  0.985510528087616,\n  0.9860267639160156,\n  0.9865337014198303,\n  0.9870312809944153,\n  0.9875196218490601,\n  0.9879986643791199,\n  0.98846834897995,\n  0.9889286756515503,\n  0.9893797039985657,\n  0.9898214340209961,\n  0.9902538061141968,\n  0.9906768798828125,\n  0.9910905361175537,\n  0.99149489402771,\n  0.9918898940086365,\n  0.9922755360603333,\n  0.9926518201828003,\n  0.9930187463760376,\n  0.9933763146400452,\n  0.9937244653701782,\n  0.9940633177757263,\n  0.9943927526473999,\n  0.9947128295898438,\n  0.9950234889984131,\n  0.9953247904777527,\n  0.9956167340278625,\n  0.9958992004394531,\n  0.9961723685264587,\n  0.9964361190795898,\n  0.9966904520988464,\n  0.9969353675842285,\n  0.9971709251403809,\n  0.9973970651626587,\n  0.997613787651062,\n  0.9978210926055908,\n  0.9980189800262451,\n  0.9982075095176697,\n  0.998386561870575,\n  0.9985562562942505,\n  0.9987165331840515,\n  0.9988673329353333,\n  0.9990087747573853,\n  0.999140739440918,\n  0.9992632865905762,\n  0.9993764758110046,\n  0.9994801878929138,\n  0.9995744824409485,\n  0.9996593594551086,\n  0.9997347593307495,\n  0.9998008012771606,\n  0.9998573660850525,\n  0.9999045133590698,\n  0.9999422430992126,\n  0.999970555305481,\n  0.99998939037323,\n  0.9999988079071045,\n  0.9999988079071045,\n  0.99998939037323,\n  0.999970555305481,\n  0.9999422430992126,\n  0.9999045133590698,\n  0.9998573660850525,\n  0.9998008012771606,\n  0.9997347593307495,\n  0.9996593594551086,\n  0.9995744824409485,\n  0.9994801878929138,\n  0.9993764758110046,\n  0.9992632865905762,\n  0.999140739440918,\n  0.9990087747573853,\n  0.9988673329353333,\n  0.9987165331840515,\n  0.9985562562942505,\n  0.998386561870575,\n  0.9982075095176697,\n  0.9980189800262451,\n  0.9978210926055908,\n  0.997613787651062,\n  0.9973970651626587,\n  0.9971709251403809,\n  0.9969353675842285,\n  0.9966904520988464,\n  0.9964361190795898,\n  0.9961723685264587,\n  0.9958992004394531,\n  0.9956167340278625,\n  0.9953247904777527,\n  0.9950234889984131,\n  0.9947128295898438,\n  0.9943927526473999,\n  0.9940633177757263,\n  0.9937244653701782,\n  0.9933763146400452,\n  0.9930187463760376,\n  0.9926518201828003,\n  0.9922755360603333,\n  0.9918898940086365,\n  0.99149489402771,\n  0.9910905361175537,\n  0.9906768798828125,\n  0.9902538061141968,\n  0.9898214340209961,\n  0.9893797039985657,\n  0.9889286756515503,\n  0.98846834897995,\n  0.9879986643791199,\n  0.9875196218490601,\n  0.9870312809944153,\n  0.9865337014198303,\n  0.9860267639160156,\n  0.985510528087616,\n  0.9849849939346313,\n  0.9844501614570618,\n  0.983906090259552,\n  0.9833527207374573,\n  0.9827900528907776,\n  0.9822181463241577,\n  0.9816369414329529,\n  0.9810464978218079,\n  0.9804468154907227,\n  0.9798378944396973,\n  0.9792196750640869,\n  0.9785922765731812,\n  0.9779556393623352,\n  0.9773097634315491,\n  0.9766547083854675,\n  0.9759904146194458,\n  0.9753168821334839,\n  0.9746342301368713,\n  0.9739423394203186,\n  0.9732412695884705,\n  0.9725310206413269,\n  0.9718115925788879,\n  0.9710829854011536,\n  0.9703452587127686,\n  0.9695983529090881,\n  0.9688422679901123,\n  0.9680771231651306,\n  0.9673027992248535,\n  0.9665193557739258,\n  0.9657268524169922,\n  0.9649251699447632,\n  0.9641144275665283,\n  0.9632945656776428,\n  0.9624656438827515,\n  0.9616276621818542,\n  0.9607805609703064,\n  0.9599244594573975,\n  0.9590592384338379,\n  0.9581850171089172,\n  0.9573017358779907,\n  0.9564094543457031,\n  0.9555081129074097,\n  0.9545977711677551,\n  0.9536784887313843,\n  0.9527501463890076,\n  0.9518128037452698,\n  0.9508665204048157,\n  0.9499112963676453,\n  0.9489470720291138,\n  0.947973906993866,\n  0.9469918012619019,\n  0.9460007548332214,\n  0.9450008273124695,\n  0.9439919590950012,\n  0.9429742097854614,\n  0.9419475197792053,\n  0.9409119486808777,\n  0.9398675560951233,\n  0.9388142824172974,\n  0.9377521276473999,\n  0.9366811513900757,\n  0.9356013536453247,\n  0.9345126748085022,\n  0.9334152340888977,\n  0.9323089718818665,\n  0.9311939477920532,\n  0.9300701022148132,\n  0.9289374947547913,\n  0.9277961850166321,\n  0.9266460537910461,\n  0.925487220287323,\n  0.9243196249008179,\n  0.9231433272361755,\n  0.921958327293396,\n  0.9207646250724792,\n  0.9195622801780701,\n  0.9183511734008789,\n  0.9171314835548401,\n  0.9159031510353088,\n  0.9146661162376404,\n  0.9134204983711243,\n  0.9121662974357605,\n  0.9109034538269043,\n  0.9096319675445557,\n  0.9083519577980042,\n  0.9070634245872498,\n  0.9057662487030029,\n  0.904460608959198,\n  0.9031463861465454,\n  0.9018236994743347,\n  0.9004924297332764,\n  0.8991527557373047,\n  0.8978045582771301,\n  0.8964478969573975,\n  0.8950827717781067,\n  0.8937091827392578,\n  0.8923271894454956,\n  0.8909367918968201,\n  0.8895379900932312,\n  0.888130784034729,\n  0.8867152333259583,\n  0.8852912783622742,\n  0.8838590383529663,\n  0.8824183940887451,\n  0.8809694647789001,\n  0.8795121908187866,\n  0.8780466914176941,\n  0.876572847366333,\n  0.8750907778739929,\n  0.873600423336029,\n  0.8721018433570862,\n  0.8705950379371643,\n  0.8690800070762634,\n  0.8675568103790283,\n  0.8660253882408142,\n  0.8644858598709106,\n  0.8629381060600281,\n  0.861382246017456,\n  0.8598182797431946,\n  0.8582462072372437,\n  0.8566660284996033,\n  0.8550778031349182,\n  0.8534814715385437,\n  0.8518770933151245,\n  0.8502646684646606,\n  0.8486442565917969,\n  0.8470158576965332,\n  0.8453794121742249,\n  0.8437350392341614,\n  0.842082679271698,\n  0.8404223918914795,\n  0.8387541770935059,\n  0.8370780348777771,\n  0.835394024848938,\n  0.8337021470069885,\n  0.8320024013519287,\n  0.8302947878837585,\n  0.8285793662071228,\n  0.8268561363220215,\n  0.8251250386238098,\n  0.8233862519264221,\n  0.8216396570205688,\n  0.8198853135108948,\n  0.8181232213973999,\n  0.816353440284729,\n  0.8145759701728821,\n  0.8127908110618591,\n  0.8109979629516602,\n  0.8091974854469299,\n  0.8073893189430237,\n  0.8055736422538757,\n  0.8037502765655518,\n  0.8019194006919861,\n  0.8000808954238892,\n  0.7982348799705505,\n  0.7963813543319702,\n  0.7945203185081482,\n  0.7926517724990845,\n  0.790775716304779,\n  0.7888922691345215,\n  0.7870013117790222,\n  0.7851030230522156,\n  0.7831972241401672,\n  0.7812840938568115,\n  0.7793636322021484,\n  0.7774357795715332,\n  0.7755005955696106,\n  0.7735580801963806,\n  0.771608293056488,\n  0.7696512341499329,\n  0.7676869034767151,\n  0.7657153606414795,\n  0.7637365460395813,\n  0.7617505788803101,\n  0.759757399559021,\n  0.7577570676803589,\n  0.7557495832443237,\n  0.7537349462509155,\n  0.751713216304779,\n  0.7496844530105591,\n  0.7476485371589661,\n  0.7456056475639343,\n  0.7435556650161743,\n  0.7414987087249756,\n  0.7394347190856934,\n  0.7373637557029724,\n  0.7352858781814575,\n  0.7332010269165039,\n  0.7311093211174011,\n  0.7290106415748596,\n  0.7269051671028137,\n  0.7247927784919739,\n  0.7226735949516296,\n  0.7205475568771362,\n  0.7184147238731384,\n  0.716275155544281,\n  0.7141287922859192,\n  0.7119757533073425,\n  0.7098159193992615,\n  0.7076494693756104,\n  0.7054762840270996,\n  0.7032964825630188,\n  0.7011100053787231,\n  0.6989169716835022,\n  0.6967173218727112,\n  0.6945110559463501,\n  0.6922982931137085,\n  0.6900790333747864,\n  0.687853217124939,\n  0.685620903968811,\n  0.6833821535110474,\n  0.681136965751648,\n  0.678885281085968,\n  0.6766272783279419,\n  0.67436283826828,\n  0.672092080116272,\n  0.669814944267273,\n  0.6675315499305725,\n  0.6652418375015259,\n  0.6629458069801331,\n  0.6606435775756836,\n  0.6583350896835327,\n  0.6560204029083252,\n  0.653699517250061,\n  0.651372492313385,\n  0.6490393280982971,\n  0.6466999650001526,\n  0.6443545818328857,\n  0.6420031189918518,\n  0.6396455764770508,\n  0.6372820138931274,\n  0.6349124312400818,\n  0.6325368881225586,\n  0.6301553249359131,\n  0.6277678608894348,\n  0.625374436378479,\n  0.6229751706123352,\n  0.6205700039863586,\n  0.6181589961051941,\n  0.6157421469688416,\n  0.613319456577301,\n  0.6108910441398621,\n  0.6084568500518799,\n  0.6060168743133545,\n  0.6035712361335754,\n  0.601119875907898,\n  0.5986628532409668,\n  0.5962002277374268,\n  0.5937319397926331,\n  0.5912580490112305,\n  0.5887786149978638,\n  0.5862935781478882,\n  0.5838030576705933,\n  0.5813069939613342,\n  0.5788054466247559,\n  0.5762984752655029,\n  0.5737860202789307,\n  0.5712682008743286,\n  0.5687450170516968,\n  0.5662164092063904,\n  0.563682496547699,\n  0.5611432194709778,\n  0.5585986971855164,\n  0.5560489296913147,\n  0.553493857383728,\n  0.5509335994720459,\n  0.5483681559562683,\n  0.5457975268363953,\n  0.5432217121124268,\n  0.5406408309936523,\n  0.5380548238754272,\n  0.5354637503623962,\n  0.5328676104545593,\n  0.5302664637565613,\n  0.5276603102684021,\n  0.5250492095947266,\n  0.5224331021308899,\n  0.5198121070861816,\n  0.517186164855957,\n  0.5145553946495056,\n  0.5119197368621826,\n  0.5092793107032776,\n  0.506633996963501,\n  0.5039839744567871,\n  0.5013291835784912,\n  0.49866965413093567,\n  0.49600541591644287,\n  0.4933364987373352,\n  0.49066293239593506,\n  0.4879847466945648,\n  0.4853019714355469,\n  0.4826146066188812,\n  0.47992268204689026,\n  0.47722622752189636,\n  0.4745252728462219,\n  0.47181984782218933,\n  0.46910998225212097,\n  0.46639570593833923,\n  0.46367698907852173,\n  0.4609539210796356,\n  0.4582265317440033,\n  0.45549479126930237,\n  0.4527587592601776,\n  0.4500184655189514,\n  0.4472739100456238,\n  0.4445251524448395,\n  0.4417721927165985,\n  0.43901506066322327,\n  0.4362538158893585,\n  0.4334884285926819,\n  0.43071895837783813,\n  0.42794543504714966,\n  0.42516788840293884,\n  0.4223863184452057,\n  0.4196007549762726,\n  0.4168112576007843,\n  0.41401779651641846,\n  0.4112204611301422,\n  0.4084192216396332,\n  0.40561413764953613,\n  0.40280523896217346,\n  0.39999255537986755,\n  0.3971760869026184,\n  0.3943558633327484,\n  0.39153191447257996,\n  0.3887042999267578,\n  0.3858729898929596,\n  0.3830380439758301,\n  0.38019949197769165,\n  0.3773573637008667,\n  0.3745116889476776,\n  0.3716624677181244,\n  0.3688097298145294,\n  0.3659535050392151,\n  0.36309385299682617,\n  0.36023077368736267,\n  0.357364296913147,\n  0.35449445247650146,\n  0.35162124037742615,\n  0.3487447500228882,\n  0.3458649516105652,\n  0.34298187494277954,\n  0.340095579624176,\n  0.337206095457077,\n  0.33431339263916016,\n  0.3314175605773926,\n  0.3285185992717743,\n  0.3256165385246277,\n  0.32271140813827515,\n  0.31980323791503906,\n  0.3168920576572418,\n  0.3139778673648834,\n  0.31106072664260864,\n  0.30814066529273987,\n  0.3052176833152771,\n  0.3022918403148651,\n  0.2993631362915039,\n  0.29643160104751587,\n  0.2934972643852234,\n  0.29056015610694885,\n  0.28762033581733704,\n  0.28467780351638794,\n  0.28173255920410156,\n  0.2787846624851227,\n  0.2758341431617737,\n  0.27288103103637695,\n  0.2699253261089325,\n  0.2669670879840851,\n  0.2640063464641571,\n  0.26104310154914856,\n  0.25807738304138184,\n  0.2551092505455017,\n  0.2521387040615082,\n  0.24916577339172363,\n  0.24619050323963165,\n  0.24321290850639343,\n  0.24023300409317017,\n  0.23725084960460663,\n  0.234266459941864,\n  0.2312798649072647,\n  0.2282910794019699,\n  0.225300133228302,\n  0.22230707108974457,\n  0.21931192278862,\n  0.21631468832492828,\n  0.2133154273033142,\n  0.21031413972377777,\n  0.20731088519096375,\n  0.20430566370487213,\n  0.2012985199689865,\n  0.19828948378562927,\n  0.1952785700559616,\n  0.1922658085823059,\n  0.18925124406814575,\n  0.18623489141464233,\n  0.18321678042411804,\n  0.18019694089889526,\n  0.17717541754245758,\n  0.174152210354805,\n  0.17112736403942108,\n  0.16810089349746704,\n  0.16507284343242645,\n  0.1620432436466217,\n  0.159012109041214,\n  0.1559794694185257,\n  0.1529453694820404,\n  0.1499098241329193,\n  0.1468728631734848,\n  0.14383451640605927,\n  0.1407948136329651,\n  0.13775378465652466,\n  0.13471145927906036,\n  0.1316678673028946,\n  0.12862302362918854,\n  0.12557697296142578,\n  0.12252973020076752,\n  0.11948134005069733,\n  0.1164318174123764,\n  0.11338119953870773,\n  0.1103295087814331,\n  0.1072767823934555,\n  0.10422304272651672,\n  0.10116831958293915,\n  0.09811264276504517,\n  0.09505604207515717,\n  0.09199854731559753,\n  0.08894018083810806,\n  0.08588097244501114,\n  0.08282095938920975,\n  0.07976016402244568,\n  0.07669861614704132,\n  0.07363634556531906,\n  0.07057337462902069,\n  0.06750974804162979,\n  0.06444548070430756,\n  0.06138060241937637,\n  0.05831514671444893,\n  0.05524914339184761,\n  0.05218261852860451,\n  0.04911560192704201,\n  0.0460481196641922,\n  0.04298020526766777,\n  0.03991188481450081,\n  0.0368431881070137,\n  0.03377414122223854,\n  0.03070477955043316,\n  0.027635125443339348,\n  0.024565212428569794,\n  0.021495068445801735,\n  0.01842472143471241,\n  0.015354199334979057,\n  0.01228353288024664,\n  0.009212750941514969,\n  0.006141882389783859,\n  0.003070955630391836,\n  1.2246468525851679e-16\n]\n"
  },
  {
    "path": "__tests__/data/sine128.json",
    "content": "[\n  0,\n  0.02473442815244198,\n  0.049453720450401306,\n  0.07414275407791138,\n  0.09878642112016678,\n  0.12336964160203934,\n  0.14787736535072327,\n  0.17229461669921875,\n  0.19660644233226776,\n  0.22079795598983765,\n  0.2448543757200241,\n  0.2687609791755676,\n  0.29250311851501465,\n  0.31606629490852356,\n  0.33943605422973633,\n  0.36259815096855164,\n  0.38553833961486816,\n  0.4082426428794861,\n  0.43069714307785034,\n  0.4528881013393402,\n  0.4748019576072693,\n  0.4964253008365631,\n  0.5177448391914368,\n  0.5387476086616516,\n  0.5594207644462585,\n  0.5797515511512756,\n  0.5997276306152344,\n  0.619336724281311,\n  0.6385669112205505,\n  0.6574063301086426,\n  0.6758434772491455,\n  0.6938670873641968,\n  0.7114661335945129,\n  0.7286298871040344,\n  0.7453477382659912,\n  0.7616095542907715,\n  0.7774053812026978,\n  0.7927254438400269,\n  0.8075605034828186,\n  0.8219014406204224,\n  0.8357394337654114,\n  0.8490660786628723,\n  0.861873209476471,\n  0.8741528987884521,\n  0.8858977556228638,\n  0.897100567817688,\n  0.9077544212341309,\n  0.9178528189659119,\n  0.9273896217346191,\n  0.9363589882850647,\n  0.9447553753852844,\n  0.9525737166404724,\n  0.9598091244697571,\n  0.9664573073387146,\n  0.9725140929222107,\n  0.9779758453369141,\n  0.9828391671180725,\n  0.9871010780334473,\n  0.990759015083313,\n  0.9938107132911682,\n  0.9962543249130249,\n  0.9980883598327637,\n  0.9993116855621338,\n  0.9999235272407532,\n  0.9999235272407532,\n  0.9993116855621338,\n  0.9980883598327637,\n  0.9962543249130249,\n  0.9938107132911682,\n  0.990759015083313,\n  0.9871010780334473,\n  0.9828391671180725,\n  0.9779758453369141,\n  0.9725140929222107,\n  0.9664573073387146,\n  0.9598091244697571,\n  0.9525737166404724,\n  0.9447553753852844,\n  0.9363589882850647,\n  0.9273896217346191,\n  0.9178528189659119,\n  0.9077544212341309,\n  0.897100567817688,\n  0.8858977556228638,\n  0.8741528987884521,\n  0.861873209476471,\n  0.8490660786628723,\n  0.8357394337654114,\n  0.8219014406204224,\n  0.8075605034828186,\n  0.7927254438400269,\n  0.7774053812026978,\n  0.7616095542907715,\n  0.7453477382659912,\n  0.7286298871040344,\n  0.7114661335945129,\n  0.6938670873641968,\n  0.6758434772491455,\n  0.6574063301086426,\n  0.6385669112205505,\n  0.619336724281311,\n  0.5997276306152344,\n  0.5797515511512756,\n  0.5594207644462585,\n  0.5387476086616516,\n  0.5177448391914368,\n  0.4964253008365631,\n  0.4748019576072693,\n  0.4528881013393402,\n  0.43069714307785034,\n  0.4082426428794861,\n  0.38553833961486816,\n  0.36259815096855164,\n  0.33943605422973633,\n  0.31606629490852356,\n  0.29250311851501465,\n  0.2687609791755676,\n  0.2448543757200241,\n  0.22079795598983765,\n  0.19660644233226776,\n  0.17229461669921875,\n  0.14787736535072327,\n  0.12336964160203934,\n  0.09878642112016678,\n  0.07414275407791138,\n  0.049453720450401306,\n  0.02473442815244198,\n  1.2246468525851679e-16\n]\n"
  },
  {
    "path": "__tests__/data/sine2048.json",
    "content": "[\n  0,\n  0.0015347296139225364,\n  0.0030694555025547743,\n  0.004604174289852381,\n  0.0061388821341097355,\n  0.007673575542867184,\n  0.009208250790834427,\n  0.010742904618382454,\n  0.012277533300220966,\n  0.013812132179737091,\n  0.015346699394285679,\n  0.016881229355931282,\n  0.018415721133351326,\n  0.01995016820728779,\n  0.02148456871509552,\n  0.023018918931484222,\n  0.024553215131163597,\n  0.026087453588843346,\n  0.02762162871658802,\n  0.02915574051439762,\n  0.0306897833943367,\n  0.03222375363111496,\n  0.03375764936208725,\n  0.035291463136672974,\n  0.03682519495487213,\n  0.038358841091394424,\n  0.039892397820949554,\n  0.041425857692956924,\n  0.042959220707416534,\n  0.044492483139038086,\n  0.04602564126253128,\n  0.04755868762731552,\n  0.04909162595868111,\n  0.05062444508075714,\n  0.05215714871883392,\n  0.053689729422330856,\n  0.05522217974066734,\n  0.05675450339913368,\n  0.05828669294714928,\n  0.05981874465942383,\n  0.06135065481066704,\n  0.0628824234008789,\n  0.06441403925418854,\n  0.06594550609588623,\n  0.06747681647539139,\n  0.06900797039270401,\n  0.0705389603972435,\n  0.07206977903842926,\n  0.07360043376684189,\n  0.07513091713190079,\n  0.07666122168302536,\n  0.07819133996963501,\n  0.07972127944231033,\n  0.08125103265047073,\n  0.08278059214353561,\n  0.08430995792150497,\n  0.08583912253379822,\n  0.08736808598041534,\n  0.08889684826135635,\n  0.09042539447546005,\n  0.09195373207330704,\n  0.09348184615373611,\n  0.09500974416732788,\n  0.09653741866350174,\n  0.09806486964225769,\n  0.09959208965301514,\n  0.10111907124519348,\n  0.10264581441879272,\n  0.10417231172323227,\n  0.10569857060909271,\n  0.10722457617521286,\n  0.10875033587217331,\n  0.11027583479881287,\n  0.11180107295513153,\n  0.1133260503411293,\n  0.11485075950622559,\n  0.11637520045042038,\n  0.11789935827255249,\n  0.11942324787378311,\n  0.12094685435295105,\n  0.1224701777100563,\n  0.12399320304393768,\n  0.12551595270633698,\n  0.1270383894443512,\n  0.12856054306030273,\n  0.1300823837518692,\n  0.1316039115190506,\n  0.13312514126300812,\n  0.13464605808258057,\n  0.13616664707660675,\n  0.13768692314624786,\n  0.1392068713903427,\n  0.1407264918088913,\n  0.14224578440189362,\n  0.14376474916934967,\n  0.14528335630893707,\n  0.1468016356229782,\n  0.1483195722103119,\n  0.14983715116977692,\n  0.1513543725013733,\n  0.152871236205101,\n  0.15438775718212128,\n  0.1559039056301117,\n  0.15741968154907227,\n  0.158935084939003,\n  0.16045011579990387,\n  0.1619647741317749,\n  0.1634790599346161,\n  0.16499294340610504,\n  0.16650643944740295,\n  0.16801954805850983,\n  0.16953226923942566,\n  0.17104458808898926,\n  0.17255648970603943,\n  0.17406800389289856,\n  0.17557910084724426,\n  0.17708978056907654,\n  0.17860004305839539,\n  0.1801098883152008,\n  0.1816193014383316,\n  0.18312829732894897,\n  0.18463686108589172,\n  0.18614497780799866,\n  0.18765266239643097,\n  0.18915991485118866,\n  0.19066670536994934,\n  0.1921730637550354,\n  0.19367896020412445,\n  0.1951843947172165,\n  0.19668938219547272,\n  0.19819389283657074,\n  0.19969795644283295,\n  0.20120152831077576,\n  0.20270463824272156,\n  0.20420727133750916,\n  0.20570941269397736,\n  0.20721107721328735,\n  0.20871224999427795,\n  0.21021294593811035,\n  0.21171313524246216,\n  0.21321281790733337,\n  0.2147120088338852,\n  0.21621069312095642,\n  0.21770887076854706,\n  0.2192065268754959,\n  0.22070367634296417,\n  0.22220028936862946,\n  0.22369639575481415,\n  0.22519196569919586,\n  0.2266870141029358,\n  0.22818152606487274,\n  0.2296755015850067,\n  0.2311689257621765,\n  0.23266181349754333,\n  0.23415414988994598,\n  0.23564594984054565,\n  0.23713718354701996,\n  0.2386278510093689,\n  0.24011796712875366,\n  0.24160750210285187,\n  0.2430964857339859,\n  0.24458488821983337,\n  0.24607272446155548,\n  0.24755996465682983,\n  0.24904663860797882,\n  0.25053271651268005,\n  0.2520182132720947,\n  0.25350308418273926,\n  0.2549873888492584,\n  0.25647109746932983,\n  0.2579541802406311,\n  0.2594366669654846,\n  0.2609185576438904,\n  0.262399822473526,\n  0.2638804614543915,\n  0.2653604745864868,\n  0.266839861869812,\n  0.26831862330436707,\n  0.269796758890152,\n  0.27127426862716675,\n  0.272751122713089,\n  0.2742273509502411,\n  0.27570292353630066,\n  0.2771778404712677,\n  0.2786521017551422,\n  0.2801257371902466,\n  0.28159868717193604,\n  0.28307098150253296,\n  0.28454259037971497,\n  0.28601354360580444,\n  0.2874838411808014,\n  0.28895342350006104,\n  0.29042235016822815,\n  0.29189059138298035,\n  0.2933581471443176,\n  0.29482501745224,\n  0.29629117250442505,\n  0.2977566421031952,\n  0.299221396446228,\n  0.30068546533584595,\n  0.30214881896972656,\n  0.3036114573478699,\n  0.3050733804702759,\n  0.3065345883369446,\n  0.307995080947876,\n  0.30945485830307007,\n  0.31091389060020447,\n  0.3123721778392792,\n  0.3138297498226166,\n  0.3152865767478943,\n  0.3167426586151123,\n  0.31819799542427063,\n  0.3196525573730469,\n  0.3211064040660858,\n  0.3225594758987427,\n  0.32401180267333984,\n  0.32546335458755493,\n  0.32691413164138794,\n  0.32836416363716125,\n  0.3298133909702301,\n  0.33126187324523926,\n  0.33270955085754395,\n  0.33415645360946655,\n  0.3356025815010071,\n  0.33704790472984314,\n  0.33849242329597473,\n  0.33993616700172424,\n  0.3413791060447693,\n  0.34282124042510986,\n  0.3442625403404236,\n  0.3457030653953552,\n  0.34714275598526,\n  0.3485816419124603,\n  0.3500196933746338,\n  0.3514569401741028,\n  0.35289332270622253,\n  0.3543289005756378,\n  0.35576364398002625,\n  0.3571975529193878,\n  0.35863062739372253,\n  0.360062837600708,\n  0.3614942133426666,\n  0.362924724817276,\n  0.36435437202453613,\n  0.3657831847667694,\n  0.36721113324165344,\n  0.36863818764686584,\n  0.3700644075870514,\n  0.3714897334575653,\n  0.37291419506073,\n  0.3743377923965454,\n  0.3757604956626892,\n  0.3771823048591614,\n  0.3786032497882843,\n  0.3800232708454132,\n  0.38144242763519287,\n  0.3828606605529785,\n  0.38427799940109253,\n  0.3856944441795349,\n  0.3871099650859833,\n  0.38852459192276,\n  0.3899382948875427,\n  0.3913510739803314,\n  0.3927629292011261,\n  0.39417386054992676,\n  0.3955838680267334,\n  0.396992951631546,\n  0.39840108156204224,\n  0.39980828762054443,\n  0.4012145400047302,\n  0.402619868516922,\n  0.40402424335479736,\n  0.4054276645183563,\n  0.4068301022052765,\n  0.40823161602020264,\n  0.40963214635849,\n  0.41103172302246094,\n  0.4124303460121155,\n  0.4138279855251312,\n  0.4152246415615082,\n  0.41662031412124634,\n  0.4180150330066681,\n  0.41940873861312866,\n  0.42080146074295044,\n  0.4221931993961334,\n  0.4235839545726776,\n  0.4249736964702606,\n  0.42636245489120483,\n  0.4277501702308655,\n  0.4291369318962097,\n  0.4305226504802704,\n  0.4319073557853699,\n  0.4332910478115082,\n  0.4346736967563629,\n  0.43605536222457886,\n  0.43743598461151123,\n  0.43881556391716003,\n  0.44019412994384766,\n  0.4415716528892517,\n  0.4429481327533722,\n  0.4443235695362091,\n  0.44569796323776245,\n  0.44707128405570984,\n  0.44844356179237366,\n  0.4498147964477539,\n  0.4511849880218506,\n  0.4525540769100189,\n  0.4539221227169037,\n  0.4552890956401825,\n  0.45665499567985535,\n  0.45801982283592224,\n  0.4593835771083832,\n  0.46074622869491577,\n  0.4621078073978424,\n  0.4634683132171631,\n  0.4648277163505554,\n  0.4661860167980194,\n  0.46754321455955505,\n  0.46889930963516235,\n  0.4702543020248413,\n  0.4716082215309143,\n  0.4729609787464142,\n  0.4743126630783081,\n  0.4756632149219513,\n  0.47701263427734375,\n  0.47836095094680786,\n  0.47970813512802124,\n  0.4810541868209839,\n  0.4823991060256958,\n  0.4837428629398346,\n  0.48508551716804504,\n  0.4864270091056824,\n  0.48776736855506897,\n  0.48910656571388245,\n  0.4904446303844452,\n  0.4917815327644348,\n  0.49311724305152893,\n  0.4944518208503723,\n  0.4957852363586426,\n  0.4971174895763397,\n  0.49844855070114136,\n  0.4997784495353699,\n  0.5011072158813477,\n  0.5024347305297852,\n  0.5037611126899719,\n  0.5050862431526184,\n  0.5064102411270142,\n  0.5077330470085144,\n  0.5090546011924744,\n  0.5103750228881836,\n  0.5116941928863525,\n  0.513012170791626,\n  0.5143289566040039,\n  0.5156445503234863,\n  0.5169588923454285,\n  0.5182720422744751,\n  0.5195839405059814,\n  0.5208946466445923,\n  0.5222041010856628,\n  0.5235123634338379,\n  0.5248193144798279,\n  0.5261251330375671,\n  0.5274296402931213,\n  0.5287328958511353,\n  0.5300349593162537,\n  0.531335711479187,\n  0.5326352715492249,\n  0.5339335799217224,\n  0.5352305769920349,\n  0.5365263223648071,\n  0.5378208756446838,\n  0.5391140580177307,\n  0.5404060482978821,\n  0.5416967272758484,\n  0.5429861545562744,\n  0.5442742705345154,\n  0.5455611348152161,\n  0.5468467473983765,\n  0.548130989074707,\n  0.5494139790534973,\n  0.5506957173347473,\n  0.5519760847091675,\n  0.5532552003860474,\n  0.5545330047607422,\n  0.555809497833252,\n  0.5570846796035767,\n  0.5583585500717163,\n  0.5596310496330261,\n  0.5609022974967957,\n  0.5621722340583801,\n  0.5634407997131348,\n  0.5647080540657043,\n  0.5659739971160889,\n  0.5672386288642883,\n  0.568501889705658,\n  0.5697637796401978,\n  0.5710243582725525,\n  0.5722836256027222,\n  0.573541522026062,\n  0.574798047542572,\n  0.576053261756897,\n  0.5773070454597473,\n  0.5785595178604126,\n  0.579810619354248,\n  0.5810604095458984,\n  0.5823087692260742,\n  0.5835557579994202,\n  0.5848013758659363,\n  0.5860456228256226,\n  0.587288498878479,\n  0.5885300040245056,\n  0.5897700786590576,\n  0.5910087823867798,\n  0.5922461152076721,\n  0.5934820175170898,\n  0.5947165489196777,\n  0.595949649810791,\n  0.5971813797950745,\n  0.5984116792678833,\n  0.5996406078338623,\n  0.6008681058883667,\n  0.6020941734313965,\n  0.6033188104629517,\n  0.604542076587677,\n  0.605763852596283,\n  0.6069842576980591,\n  0.6082032322883606,\n  0.6094207167625427,\n  0.610636830329895,\n  0.6118514537811279,\n  0.613064706325531,\n  0.6142764687538147,\n  0.6154868006706238,\n  0.6166956424713135,\n  0.6179030537605286,\n  0.619109034538269,\n  0.6203135251998901,\n  0.6215165853500366,\n  0.6227181553840637,\n  0.6239182353019714,\n  0.6251168847084045,\n  0.6263140439987183,\n  0.6275097727775574,\n  0.6287039518356323,\n  0.6298967003822327,\n  0.6310879588127136,\n  0.6322777271270752,\n  0.6334660053253174,\n  0.6346527934074402,\n  0.6358380317687988,\n  0.6370218396186829,\n  0.6382041573524475,\n  0.639384925365448,\n  0.6405642032623291,\n  0.6417419910430908,\n  0.6429182291030884,\n  0.6440929770469666,\n  0.6452661752700806,\n  0.64643794298172,\n  0.6476081013679504,\n  0.6487767696380615,\n  0.6499438881874084,\n  0.651109516620636,\n  0.6522735357284546,\n  0.6534360647201538,\n  0.6545971035957336,\n  0.6557565331459045,\n  0.656914472579956,\n  0.6580708026885986,\n  0.659225583076477,\n  0.6603788733482361,\n  0.6615305542945862,\n  0.6626806855201721,\n  0.6638292670249939,\n  0.6649762988090515,\n  0.666121780872345,\n  0.6672656536102295,\n  0.6684079766273499,\n  0.6695486903190613,\n  0.6706878542900085,\n  0.6718254089355469,\n  0.672961413860321,\n  0.674095869064331,\n  0.6752286553382874,\n  0.6763598918914795,\n  0.6774895191192627,\n  0.6786175966262817,\n  0.6797440648078918,\n  0.6808688640594482,\n  0.6819921135902405,\n  0.6831137537956238,\n  0.6842337846755981,\n  0.6853522062301636,\n  0.6864690184593201,\n  0.6875841617584229,\n  0.6886977553367615,\n  0.6898096799850464,\n  0.6909199953079224,\n  0.6920287013053894,\n  0.6931357383728027,\n  0.6942411661148071,\n  0.6953449845314026,\n  0.6964471340179443,\n  0.6975476741790771,\n  0.6986465454101562,\n  0.6997437477111816,\n  0.7008393406867981,\n  0.7019332647323608,\n  0.7030255198478699,\n  0.70411616563797,\n  0.7052050828933716,\n  0.7062923908233643,\n  0.7073780298233032,\n  0.7084619998931885,\n  0.70954430103302,\n  0.7106249332427979,\n  0.711703896522522,\n  0.7127811908721924,\n  0.7138567566871643,\n  0.7149306535720825,\n  0.7160029411315918,\n  0.7170734405517578,\n  0.7181423306465149,\n  0.7192094922065735,\n  0.7202749848365784,\n  0.7213387489318848,\n  0.7224007844924927,\n  0.7234612107276917,\n  0.7245198488235474,\n  0.7255768179893494,\n  0.7266320586204529,\n  0.7276856303215027,\n  0.728737473487854,\n  0.7297875881195068,\n  0.7308359742164612,\n  0.731882631778717,\n  0.7329275608062744,\n  0.7339708209037781,\n  0.7350122928619385,\n  0.7360520958900452,\n  0.7370901107788086,\n  0.7381263971328735,\n  0.73916095495224,\n  0.740193784236908,\n  0.7412248253822327,\n  0.7422541379928589,\n  0.7432817220687866,\n  0.7443075776100159,\n  0.7453316450119019,\n  0.7463539242744446,\n  0.7473745346069336,\n  0.7483932971954346,\n  0.7494103312492371,\n  0.7504256367683411,\n  0.751439094543457,\n  0.7524508237838745,\n  0.7534608244895935,\n  0.7544689774513245,\n  0.7554754018783569,\n  0.7564800381660461,\n  0.7574828863143921,\n  0.7584839463233948,\n  0.7594832181930542,\n  0.7604807019233704,\n  0.7614763975143433,\n  0.7624703049659729,\n  0.7634624242782593,\n  0.7644527554512024,\n  0.7654412388801575,\n  0.7664279341697693,\n  0.7674128413200378,\n  0.7683959603309631,\n  0.7693772315979004,\n  0.7703567147254944,\n  0.7713343501091003,\n  0.772310197353363,\n  0.7732841968536377,\n  0.7742564082145691,\n  0.7752267718315125,\n  0.7761953473091125,\n  0.7771620750427246,\n  0.7781269550323486,\n  0.7790899872779846,\n  0.7800512313842773,\n  0.781010627746582,\n  0.7819681763648987,\n  0.7829238772392273,\n  0.7838777303695679,\n  0.7848297357559204,\n  0.7857798933982849,\n  0.7867282032966614,\n  0.7876746654510498,\n  0.7886192798614502,\n  0.7895620465278625,\n  0.7905029058456421,\n  0.7914419770240784,\n  0.7923791408538818,\n  0.7933143973350525,\n  0.7942478656768799,\n  0.7951793670654297,\n  0.7961090803146362,\n  0.79703688621521,\n  0.7979628443717957,\n  0.7988868951797485,\n  0.7998090386390686,\n  0.8007293343544006,\n  0.8016477227210999,\n  0.802564263343811,\n  0.8034788370132446,\n  0.8043915629386902,\n  0.8053024411201477,\n  0.8062113523483276,\n  0.8071184158325195,\n  0.8080235123634338,\n  0.8089267611503601,\n  0.8098281025886536,\n  0.8107275366783142,\n  0.811625063419342,\n  0.8125206232070923,\n  0.8134143352508545,\n  0.8143060803413391,\n  0.8151959776878357,\n  0.8160839080810547,\n  0.8169698715209961,\n  0.8178539872169495,\n  0.8187361359596252,\n  0.8196163773536682,\n  0.8204946517944336,\n  0.8213710188865662,\n  0.8222454786300659,\n  0.8231179714202881,\n  0.8239885568618774,\n  0.8248571157455444,\n  0.8257238268852234,\n  0.8265885710716248,\n  0.8274513483047485,\n  0.8283121585845947,\n  0.8291710615158081,\n  0.8300279974937439,\n  0.8308829665184021,\n  0.8317359685897827,\n  0.8325870037078857,\n  0.833436131477356,\n  0.8342832326889038,\n  0.8351284265518188,\n  0.8359716534614563,\n  0.8368128538131714,\n  0.8376521468162537,\n  0.8384894132614136,\n  0.8393247127532959,\n  0.8401580452919006,\n  0.8409894108772278,\n  0.8418188095092773,\n  0.8426461815834045,\n  0.8434715867042542,\n  0.8442950248718262,\n  0.8451164364814758,\n  0.8459358811378479,\n  0.8467533588409424,\n  0.8475688099861145,\n  0.848382294178009,\n  0.8491937518119812,\n  0.850003182888031,\n  0.8508106470108032,\n  0.8516161441802979,\n  0.8524195551872253,\n  0.8532209992408752,\n  0.8540204167366028,\n  0.8548178672790527,\n  0.8556132912635803,\n  0.8564066886901855,\n  0.8571980595588684,\n  0.8579874038696289,\n  0.858774721622467,\n  0.8595600128173828,\n  0.860343337059021,\n  0.861124575138092,\n  0.8619038462638855,\n  0.8626810312271118,\n  0.8634561896324158,\n  0.8642293214797974,\n  0.8650004267692566,\n  0.8657695055007935,\n  0.8665364980697632,\n  0.8673015236854553,\n  0.8680644631385803,\n  0.868825376033783,\n  0.8695842027664185,\n  0.8703410029411316,\n  0.8710957765579224,\n  0.871848464012146,\n  0.8725991249084473,\n  0.8733476996421814,\n  0.8740942478179932,\n  0.8748387098312378,\n  0.8755810856819153,\n  0.8763214945793152,\n  0.8770597577095032,\n  0.8777959942817688,\n  0.8785301446914673,\n  0.8792622089385986,\n  0.8799922466278076,\n  0.8807201981544495,\n  0.8814460635185242,\n  0.8821698427200317,\n  0.8828915357589722,\n  0.8836112022399902,\n  0.8843287229537964,\n  0.8850442171096802,\n  0.885757565498352,\n  0.8864688873291016,\n  0.8871781229972839,\n  0.8878852128982544,\n  0.8885902762413025,\n  0.8892931938171387,\n  0.8899940252304077,\n  0.8906927704811096,\n  0.8913894295692444,\n  0.8920839428901672,\n  0.8927764296531677,\n  0.8934667706489563,\n  0.8941550254821777,\n  0.8948411345481873,\n  0.8955251574516296,\n  0.8962070941925049,\n  0.8968868851661682,\n  0.8975645899772644,\n  0.8982401490211487,\n  0.8989136219024658,\n  0.899584949016571,\n  0.9002541899681091,\n  0.9009212851524353,\n  0.9015862941741943,\n  0.9022491574287415,\n  0.9029098749160767,\n  0.9035685062408447,\n  0.9042249917984009,\n  0.9048793315887451,\n  0.9055315256118774,\n  0.9061816334724426,\n  0.9068295955657959,\n  0.9074754118919373,\n  0.9081190824508667,\n  0.9087606072425842,\n  0.9094000458717346,\n  0.9100372791290283,\n  0.9106723666191101,\n  0.9113053679466248,\n  0.9119361639022827,\n  0.9125648736953735,\n  0.9131913781166077,\n  0.9138157367706299,\n  0.9144379496574402,\n  0.9150580167770386,\n  0.915675938129425,\n  0.9162917137145996,\n  0.9169052839279175,\n  0.9175167679786682,\n  0.9181260466575623,\n  0.9187331199645996,\n  0.9193381071090698,\n  0.9199408888816833,\n  0.920541524887085,\n  0.9211399555206299,\n  0.9217362403869629,\n  0.9223303198814392,\n  0.9229222536087036,\n  0.9235120415687561,\n  0.9240996241569519,\n  0.9246850609779358,\n  0.925268292427063,\n  0.9258493185043335,\n  0.9264281988143921,\n  0.927004873752594,\n  0.927579402923584,\n  0.9281517267227173,\n  0.9287218451499939,\n  0.9292898178100586,\n  0.9298555850982666,\n  0.9304191470146179,\n  0.9309805035591125,\n  0.9315397143363953,\n  0.9320966601371765,\n  0.9326514601707458,\n  0.9332040548324585,\n  0.9337545037269592,\n  0.9343026876449585,\n  0.9348486661911011,\n  0.9353924989700317,\n  0.9359340667724609,\n  0.9364734888076782,\n  0.937010645866394,\n  0.937545657157898,\n  0.9380784034729004,\n  0.9386089444160461,\n  0.93913733959198,\n  0.9396634697914124,\n  0.940187394618988,\n  0.940709114074707,\n  0.9412285685539246,\n  0.9417458772659302,\n  0.9422609210014343,\n  0.9427737593650818,\n  0.9432843923568726,\n  0.9437927603721619,\n  0.9442989826202393,\n  0.9448028802871704,\n  0.9453046321868896,\n  0.9458041191101074,\n  0.9463014006614685,\n  0.9467964172363281,\n  0.947289228439331,\n  0.9477798342704773,\n  0.9482681751251221,\n  0.9487543106079102,\n  0.9492381811141968,\n  0.9497198462486267,\n  0.9501992464065552,\n  0.9506763815879822,\n  0.9511513113975525,\n  0.9516240358352661,\n  0.9520944356918335,\n  0.952562689781189,\n  0.9530286192893982,\n  0.9534923434257507,\n  0.9539538025856018,\n  0.9544130563735962,\n  0.9548699855804443,\n  0.9553247690200806,\n  0.9557772278785706,\n  0.9562274217605591,\n  0.9566754102706909,\n  0.9571211338043213,\n  0.9575645923614502,\n  0.9580057859420776,\n  0.9584447741508484,\n  0.9588814377784729,\n  0.9593158960342407,\n  0.9597480893135071,\n  0.960178017616272,\n  0.9606056809425354,\n  0.9610310196876526,\n  0.9614541530609131,\n  0.9618750214576721,\n  0.9622936248779297,\n  0.9627099633216858,\n  0.9631240367889404,\n  0.9635358452796936,\n  0.9639453887939453,\n  0.9643526077270508,\n  0.9647576212882996,\n  0.9651603102684021,\n  0.9655607342720032,\n  0.9659588932991028,\n  0.9663547873497009,\n  0.9667484164237976,\n  0.9671397805213928,\n  0.9675288200378418,\n  0.9679155945777893,\n  0.9683001041412354,\n  0.9686822891235352,\n  0.9690622687339783,\n  0.9694399237632751,\n  0.9698152542114258,\n  0.9701883792877197,\n  0.9705591797828674,\n  0.9709277153015137,\n  0.9712939262390137,\n  0.9716578722000122,\n  0.9720194935798645,\n  0.9723788499832153,\n  0.9727359414100647,\n  0.9730907082557678,\n  0.9734432101249695,\n  0.9737934470176697,\n  0.9741412997245789,\n  0.9744869470596313,\n  0.9748302698135376,\n  0.9751712679862976,\n  0.9755100011825562,\n  0.9758464097976685,\n  0.9761805534362793,\n  0.9765123724937439,\n  0.9768418669700623,\n  0.9771690964698792,\n  0.9774940013885498,\n  0.977816641330719,\n  0.9781369566917419,\n  0.9784549474716187,\n  0.9787706732749939,\n  0.9790840744972229,\n  0.9793952107429504,\n  0.979703962802887,\n  0.980010449886322,\n  0.9803146123886108,\n  0.9806165099143982,\n  0.9809160232543945,\n  0.9812132716178894,\n  0.9815082550048828,\n  0.9818008542060852,\n  0.9820911884307861,\n  0.982379138469696,\n  0.9826648235321045,\n  0.9829481840133667,\n  0.9832292795181274,\n  0.9835079908370972,\n  0.9837844371795654,\n  0.9840584993362427,\n  0.9843302965164185,\n  0.984599769115448,\n  0.9848669171333313,\n  0.9851317405700684,\n  0.9853942394256592,\n  0.9856544137001038,\n  0.9859123229980469,\n  0.986167848110199,\n  0.9864210486412048,\n  0.9866719841957092,\n  0.9869205355644226,\n  0.9871667623519897,\n  0.9874107241630554,\n  0.9876523017883301,\n  0.9878915548324585,\n  0.9881285429000854,\n  0.9883631467819214,\n  0.9885954260826111,\n  0.9888253808021545,\n  0.9890530109405518,\n  0.9892783164978027,\n  0.9895012974739075,\n  0.9897218942642212,\n  0.9899402260780334,\n  0.9901562333106995,\n  0.9903698563575745,\n  0.9905811548233032,\n  0.9907901287078857,\n  0.990996778011322,\n  0.9912011027336121,\n  0.9914031028747559,\n  0.9916027188301086,\n  0.9918000102043152,\n  0.9919949769973755,\n  0.9921876192092896,\n  0.9923779368400574,\n  0.9925658702850342,\n  0.9927514791488647,\n  0.9929347634315491,\n  0.9931157231330872,\n  0.993294358253479,\n  0.9934706091880798,\n  0.9936445355415344,\n  0.993816077709198,\n  0.9939853549003601,\n  0.9941522479057312,\n  0.994316816329956,\n  0.9944790601730347,\n  0.9946389198303223,\n  0.9947964549064636,\n  0.994951605796814,\n  0.9951044917106628,\n  0.9952549934387207,\n  0.9954031705856323,\n  0.9955489635467529,\n  0.9956924319267273,\n  0.9958335757255554,\n  0.9959723353385925,\n  0.9961087703704834,\n  0.9962428212165833,\n  0.9963746070861816,\n  0.996504008769989,\n  0.9966310262680054,\n  0.9967557191848755,\n  0.9968780875205994,\n  0.9969980716705322,\n  0.9971157312393188,\n  0.9972310662269592,\n  0.9973440170288086,\n  0.9974545836448669,\n  0.9975628852844238,\n  0.9976687431335449,\n  0.9977723360061646,\n  0.9978735446929932,\n  0.9979723691940308,\n  0.9980689287185669,\n  0.9981630444526672,\n  0.9982548356056213,\n  0.9983443021774292,\n  0.9984314441680908,\n  0.9985162019729614,\n  0.998598575592041,\n  0.9986786246299744,\n  0.9987562894821167,\n  0.9988316297531128,\n  0.9989046454429626,\n  0.9989752769470215,\n  0.9990435838699341,\n  0.9991095066070557,\n  0.999173104763031,\n  0.9992343187332153,\n  0.9992931485176086,\n  0.9993497133255005,\n  0.9994038343429565,\n  0.9994556307792664,\n  0.9995051026344299,\n  0.9995521903038025,\n  0.9995969533920288,\n  0.9996393322944641,\n  0.9996793866157532,\n  0.9997170567512512,\n  0.999752402305603,\n  0.9997853636741638,\n  0.9998160004615784,\n  0.9998442530632019,\n  0.9998701810836792,\n  0.9998937249183655,\n  0.9999148845672607,\n  0.9999337792396545,\n  0.9999502301216125,\n  0.9999643564224243,\n  0.9999761581420898,\n  0.9999855756759644,\n  0.9999926686286926,\n  0.9999973773956299,\n  0.9999997019767761,\n  0.9999997019767761,\n  0.9999973773956299,\n  0.9999926686286926,\n  0.9999855756759644,\n  0.9999761581420898,\n  0.9999643564224243,\n  0.9999502301216125,\n  0.9999337792396545,\n  0.9999148845672607,\n  0.9998937249183655,\n  0.9998701810836792,\n  0.9998442530632019,\n  0.9998160004615784,\n  0.9997853636741638,\n  0.999752402305603,\n  0.9997170567512512,\n  0.9996793866157532,\n  0.9996393322944641,\n  0.9995969533920288,\n  0.9995521903038025,\n  0.9995051026344299,\n  0.9994556307792664,\n  0.9994038343429565,\n  0.9993497133255005,\n  0.9992931485176086,\n  0.9992343187332153,\n  0.999173104763031,\n  0.9991095066070557,\n  0.9990435838699341,\n  0.9989752769470215,\n  0.9989046454429626,\n  0.9988316297531128,\n  0.9987562894821167,\n  0.9986786246299744,\n  0.998598575592041,\n  0.9985162019729614,\n  0.9984314441680908,\n  0.9983443021774292,\n  0.9982548356056213,\n  0.9981630444526672,\n  0.9980689287185669,\n  0.9979723691940308,\n  0.9978735446929932,\n  0.9977723360061646,\n  0.9976687431335449,\n  0.9975628852844238,\n  0.9974545836448669,\n  0.9973440170288086,\n  0.9972310662269592,\n  0.9971157312393188,\n  0.9969980716705322,\n  0.9968780875205994,\n  0.9967557191848755,\n  0.9966310262680054,\n  0.996504008769989,\n  0.9963746070861816,\n  0.9962428212165833,\n  0.9961087703704834,\n  0.9959723353385925,\n  0.9958335757255554,\n  0.9956924319267273,\n  0.9955489635467529,\n  0.9954031705856323,\n  0.9952549934387207,\n  0.9951044917106628,\n  0.994951605796814,\n  0.9947964549064636,\n  0.9946389198303223,\n  0.9944790601730347,\n  0.994316816329956,\n  0.9941522479057312,\n  0.9939853549003601,\n  0.993816077709198,\n  0.9936445355415344,\n  0.9934706091880798,\n  0.993294358253479,\n  0.9931157231330872,\n  0.9929347634315491,\n  0.9927514791488647,\n  0.9925658702850342,\n  0.9923779368400574,\n  0.9921876192092896,\n  0.9919949769973755,\n  0.9918000102043152,\n  0.9916027188301086,\n  0.9914031028747559,\n  0.9912011027336121,\n  0.990996778011322,\n  0.9907901287078857,\n  0.9905811548233032,\n  0.9903698563575745,\n  0.9901562333106995,\n  0.9899402260780334,\n  0.9897218942642212,\n  0.9895012974739075,\n  0.9892783164978027,\n  0.9890530109405518,\n  0.9888253808021545,\n  0.9885954260826111,\n  0.9883631467819214,\n  0.9881285429000854,\n  0.9878915548324585,\n  0.9876523017883301,\n  0.9874107241630554,\n  0.9871667623519897,\n  0.9869205355644226,\n  0.9866719841957092,\n  0.9864210486412048,\n  0.986167848110199,\n  0.9859123229980469,\n  0.9856544137001038,\n  0.9853942394256592,\n  0.9851317405700684,\n  0.9848669171333313,\n  0.984599769115448,\n  0.9843302965164185,\n  0.9840584993362427,\n  0.9837844371795654,\n  0.9835079908370972,\n  0.9832292795181274,\n  0.9829481840133667,\n  0.9826648235321045,\n  0.982379138469696,\n  0.9820911884307861,\n  0.9818008542060852,\n  0.9815082550048828,\n  0.9812132716178894,\n  0.9809160232543945,\n  0.9806165099143982,\n  0.9803146123886108,\n  0.980010449886322,\n  0.979703962802887,\n  0.9793952107429504,\n  0.9790840744972229,\n  0.9787706732749939,\n  0.9784549474716187,\n  0.9781369566917419,\n  0.977816641330719,\n  0.9774940013885498,\n  0.9771690964698792,\n  0.9768418669700623,\n  0.9765123724937439,\n  0.9761805534362793,\n  0.9758464097976685,\n  0.9755100011825562,\n  0.9751712679862976,\n  0.9748302698135376,\n  0.9744869470596313,\n  0.9741412997245789,\n  0.9737934470176697,\n  0.9734432101249695,\n  0.9730907082557678,\n  0.9727359414100647,\n  0.9723788499832153,\n  0.9720194935798645,\n  0.9716578722000122,\n  0.9712939262390137,\n  0.9709277153015137,\n  0.9705591797828674,\n  0.9701883792877197,\n  0.9698152542114258,\n  0.9694399237632751,\n  0.9690622687339783,\n  0.9686822891235352,\n  0.9683001041412354,\n  0.9679155945777893,\n  0.9675288200378418,\n  0.9671397805213928,\n  0.9667484164237976,\n  0.9663547873497009,\n  0.9659588932991028,\n  0.9655607342720032,\n  0.9651603102684021,\n  0.9647576212882996,\n  0.9643526077270508,\n  0.9639453887939453,\n  0.9635358452796936,\n  0.9631240367889404,\n  0.9627099633216858,\n  0.9622936248779297,\n  0.9618750214576721,\n  0.9614541530609131,\n  0.9610310196876526,\n  0.9606056809425354,\n  0.960178017616272,\n  0.9597480893135071,\n  0.9593158960342407,\n  0.9588814377784729,\n  0.9584447741508484,\n  0.9580057859420776,\n  0.9575645923614502,\n  0.9571211338043213,\n  0.9566754102706909,\n  0.9562274217605591,\n  0.9557772278785706,\n  0.9553247690200806,\n  0.9548699855804443,\n  0.9544130563735962,\n  0.9539538025856018,\n  0.9534923434257507,\n  0.9530286192893982,\n  0.952562689781189,\n  0.9520944356918335,\n  0.9516240358352661,\n  0.9511513113975525,\n  0.9506763815879822,\n  0.9501992464065552,\n  0.9497198462486267,\n  0.9492381811141968,\n  0.9487543106079102,\n  0.9482681751251221,\n  0.9477798342704773,\n  0.947289228439331,\n  0.9467964172363281,\n  0.9463014006614685,\n  0.9458041191101074,\n  0.9453046321868896,\n  0.9448028802871704,\n  0.9442989826202393,\n  0.9437927603721619,\n  0.9432843923568726,\n  0.9427737593650818,\n  0.9422609210014343,\n  0.9417458772659302,\n  0.9412285685539246,\n  0.940709114074707,\n  0.940187394618988,\n  0.9396634697914124,\n  0.93913733959198,\n  0.9386089444160461,\n  0.9380784034729004,\n  0.937545657157898,\n  0.937010645866394,\n  0.9364734888076782,\n  0.9359340667724609,\n  0.9353924989700317,\n  0.9348486661911011,\n  0.9343026876449585,\n  0.9337545037269592,\n  0.9332040548324585,\n  0.9326514601707458,\n  0.9320966601371765,\n  0.9315397143363953,\n  0.9309805035591125,\n  0.9304191470146179,\n  0.9298555850982666,\n  0.9292898178100586,\n  0.9287218451499939,\n  0.9281517267227173,\n  0.927579402923584,\n  0.927004873752594,\n  0.9264281988143921,\n  0.9258493185043335,\n  0.925268292427063,\n  0.9246850609779358,\n  0.9240996241569519,\n  0.9235120415687561,\n  0.9229222536087036,\n  0.9223303198814392,\n  0.9217362403869629,\n  0.9211399555206299,\n  0.920541524887085,\n  0.9199408888816833,\n  0.9193381071090698,\n  0.9187331199645996,\n  0.9181260466575623,\n  0.9175167679786682,\n  0.9169052839279175,\n  0.9162917137145996,\n  0.915675938129425,\n  0.9150580167770386,\n  0.9144379496574402,\n  0.9138157367706299,\n  0.9131913781166077,\n  0.9125648736953735,\n  0.9119361639022827,\n  0.9113053679466248,\n  0.9106723666191101,\n  0.9100372791290283,\n  0.9094000458717346,\n  0.9087606072425842,\n  0.9081190824508667,\n  0.9074754118919373,\n  0.9068295955657959,\n  0.9061816334724426,\n  0.9055315256118774,\n  0.9048793315887451,\n  0.9042249917984009,\n  0.9035685062408447,\n  0.9029098749160767,\n  0.9022491574287415,\n  0.9015862941741943,\n  0.9009212851524353,\n  0.9002541899681091,\n  0.899584949016571,\n  0.8989136219024658,\n  0.8982401490211487,\n  0.8975645899772644,\n  0.8968868851661682,\n  0.8962070941925049,\n  0.8955251574516296,\n  0.8948411345481873,\n  0.8941550254821777,\n  0.8934667706489563,\n  0.8927764296531677,\n  0.8920839428901672,\n  0.8913894295692444,\n  0.8906927704811096,\n  0.8899940252304077,\n  0.8892931938171387,\n  0.8885902762413025,\n  0.8878852128982544,\n  0.8871781229972839,\n  0.8864688873291016,\n  0.885757565498352,\n  0.8850442171096802,\n  0.8843287229537964,\n  0.8836112022399902,\n  0.8828915357589722,\n  0.8821698427200317,\n  0.8814460635185242,\n  0.8807201981544495,\n  0.8799922466278076,\n  0.8792622089385986,\n  0.8785301446914673,\n  0.8777959942817688,\n  0.8770597577095032,\n  0.8763214945793152,\n  0.8755810856819153,\n  0.8748387098312378,\n  0.8740942478179932,\n  0.8733476996421814,\n  0.8725991249084473,\n  0.871848464012146,\n  0.8710957765579224,\n  0.8703410029411316,\n  0.8695842027664185,\n  0.868825376033783,\n  0.8680644631385803,\n  0.8673015236854553,\n  0.8665364980697632,\n  0.8657695055007935,\n  0.8650004267692566,\n  0.8642293214797974,\n  0.8634561896324158,\n  0.8626810312271118,\n  0.8619038462638855,\n  0.861124575138092,\n  0.860343337059021,\n  0.8595600128173828,\n  0.858774721622467,\n  0.8579874038696289,\n  0.8571980595588684,\n  0.8564066886901855,\n  0.8556132912635803,\n  0.8548178672790527,\n  0.8540204167366028,\n  0.8532209992408752,\n  0.8524195551872253,\n  0.8516161441802979,\n  0.8508106470108032,\n  0.850003182888031,\n  0.8491937518119812,\n  0.848382294178009,\n  0.8475688099861145,\n  0.8467533588409424,\n  0.8459358811378479,\n  0.8451164364814758,\n  0.8442950248718262,\n  0.8434715867042542,\n  0.8426461815834045,\n  0.8418188095092773,\n  0.8409894108772278,\n  0.8401580452919006,\n  0.8393247127532959,\n  0.8384894132614136,\n  0.8376521468162537,\n  0.8368128538131714,\n  0.8359716534614563,\n  0.8351284265518188,\n  0.8342832326889038,\n  0.833436131477356,\n  0.8325870037078857,\n  0.8317359685897827,\n  0.8308829665184021,\n  0.8300279974937439,\n  0.8291710615158081,\n  0.8283121585845947,\n  0.8274513483047485,\n  0.8265885710716248,\n  0.8257238268852234,\n  0.8248571157455444,\n  0.8239885568618774,\n  0.8231179714202881,\n  0.8222454786300659,\n  0.8213710188865662,\n  0.8204946517944336,\n  0.8196163773536682,\n  0.8187361359596252,\n  0.8178539872169495,\n  0.8169698715209961,\n  0.8160839080810547,\n  0.8151959776878357,\n  0.8143060803413391,\n  0.8134143352508545,\n  0.8125206232070923,\n  0.811625063419342,\n  0.8107275366783142,\n  0.8098281025886536,\n  0.8089267611503601,\n  0.8080235123634338,\n  0.8071184158325195,\n  0.8062113523483276,\n  0.8053024411201477,\n  0.8043915629386902,\n  0.8034788370132446,\n  0.802564263343811,\n  0.8016477227210999,\n  0.8007293343544006,\n  0.7998090386390686,\n  0.7988868951797485,\n  0.7979628443717957,\n  0.79703688621521,\n  0.7961090803146362,\n  0.7951793670654297,\n  0.7942478656768799,\n  0.7933143973350525,\n  0.7923791408538818,\n  0.7914419770240784,\n  0.7905029058456421,\n  0.7895620465278625,\n  0.7886192798614502,\n  0.7876746654510498,\n  0.7867282032966614,\n  0.7857798933982849,\n  0.7848297357559204,\n  0.7838777303695679,\n  0.7829238772392273,\n  0.7819681763648987,\n  0.781010627746582,\n  0.7800512313842773,\n  0.7790899872779846,\n  0.7781269550323486,\n  0.7771620750427246,\n  0.7761953473091125,\n  0.7752267718315125,\n  0.7742564082145691,\n  0.7732841968536377,\n  0.772310197353363,\n  0.7713343501091003,\n  0.7703567147254944,\n  0.7693772315979004,\n  0.7683959603309631,\n  0.7674128413200378,\n  0.7664279341697693,\n  0.7654412388801575,\n  0.7644527554512024,\n  0.7634624242782593,\n  0.7624703049659729,\n  0.7614763975143433,\n  0.7604807019233704,\n  0.7594832181930542,\n  0.7584839463233948,\n  0.7574828863143921,\n  0.7564800381660461,\n  0.7554754018783569,\n  0.7544689774513245,\n  0.7534608244895935,\n  0.7524508237838745,\n  0.751439094543457,\n  0.7504256367683411,\n  0.7494103312492371,\n  0.7483932971954346,\n  0.7473745346069336,\n  0.7463539242744446,\n  0.7453316450119019,\n  0.7443075776100159,\n  0.7432817220687866,\n  0.7422541379928589,\n  0.7412248253822327,\n  0.740193784236908,\n  0.73916095495224,\n  0.7381263971328735,\n  0.7370901107788086,\n  0.7360520958900452,\n  0.7350122928619385,\n  0.7339708209037781,\n  0.7329275608062744,\n  0.731882631778717,\n  0.7308359742164612,\n  0.7297875881195068,\n  0.728737473487854,\n  0.7276856303215027,\n  0.7266320586204529,\n  0.7255768179893494,\n  0.7245198488235474,\n  0.7234612107276917,\n  0.7224007844924927,\n  0.7213387489318848,\n  0.7202749848365784,\n  0.7192094922065735,\n  0.7181423306465149,\n  0.7170734405517578,\n  0.7160029411315918,\n  0.7149306535720825,\n  0.7138567566871643,\n  0.7127811908721924,\n  0.711703896522522,\n  0.7106249332427979,\n  0.70954430103302,\n  0.7084619998931885,\n  0.7073780298233032,\n  0.7062923908233643,\n  0.7052050828933716,\n  0.70411616563797,\n  0.7030255198478699,\n  0.7019332647323608,\n  0.7008393406867981,\n  0.6997437477111816,\n  0.6986465454101562,\n  0.6975476741790771,\n  0.6964471340179443,\n  0.6953449845314026,\n  0.6942411661148071,\n  0.6931357383728027,\n  0.6920287013053894,\n  0.6909199953079224,\n  0.6898096799850464,\n  0.6886977553367615,\n  0.6875841617584229,\n  0.6864690184593201,\n  0.6853522062301636,\n  0.6842337846755981,\n  0.6831137537956238,\n  0.6819921135902405,\n  0.6808688640594482,\n  0.6797440648078918,\n  0.6786175966262817,\n  0.6774895191192627,\n  0.6763598918914795,\n  0.6752286553382874,\n  0.674095869064331,\n  0.672961413860321,\n  0.6718254089355469,\n  0.6706878542900085,\n  0.6695486903190613,\n  0.6684079766273499,\n  0.6672656536102295,\n  0.666121780872345,\n  0.6649762988090515,\n  0.6638292670249939,\n  0.6626806855201721,\n  0.6615305542945862,\n  0.6603788733482361,\n  0.659225583076477,\n  0.6580708026885986,\n  0.656914472579956,\n  0.6557565331459045,\n  0.6545971035957336,\n  0.6534360647201538,\n  0.6522735357284546,\n  0.651109516620636,\n  0.6499438881874084,\n  0.6487767696380615,\n  0.6476081013679504,\n  0.64643794298172,\n  0.6452661752700806,\n  0.6440929770469666,\n  0.6429182291030884,\n  0.6417419910430908,\n  0.6405642032623291,\n  0.639384925365448,\n  0.6382041573524475,\n  0.6370218396186829,\n  0.6358380317687988,\n  0.6346527934074402,\n  0.6334660053253174,\n  0.6322777271270752,\n  0.6310879588127136,\n  0.6298967003822327,\n  0.6287039518356323,\n  0.6275097727775574,\n  0.6263140439987183,\n  0.6251168847084045,\n  0.6239182353019714,\n  0.6227181553840637,\n  0.6215165853500366,\n  0.6203135251998901,\n  0.619109034538269,\n  0.6179030537605286,\n  0.6166956424713135,\n  0.6154868006706238,\n  0.6142764687538147,\n  0.613064706325531,\n  0.6118514537811279,\n  0.610636830329895,\n  0.6094207167625427,\n  0.6082032322883606,\n  0.6069842576980591,\n  0.605763852596283,\n  0.604542076587677,\n  0.6033188104629517,\n  0.6020941734313965,\n  0.6008681058883667,\n  0.5996406078338623,\n  0.5984116792678833,\n  0.5971813797950745,\n  0.595949649810791,\n  0.5947165489196777,\n  0.5934820175170898,\n  0.5922461152076721,\n  0.5910087823867798,\n  0.5897700786590576,\n  0.5885300040245056,\n  0.587288498878479,\n  0.5860456228256226,\n  0.5848013758659363,\n  0.5835557579994202,\n  0.5823087692260742,\n  0.5810604095458984,\n  0.579810619354248,\n  0.5785595178604126,\n  0.5773070454597473,\n  0.576053261756897,\n  0.574798047542572,\n  0.573541522026062,\n  0.5722836256027222,\n  0.5710243582725525,\n  0.5697637796401978,\n  0.568501889705658,\n  0.5672386288642883,\n  0.5659739971160889,\n  0.5647080540657043,\n  0.5634407997131348,\n  0.5621722340583801,\n  0.5609022974967957,\n  0.5596310496330261,\n  0.5583585500717163,\n  0.5570846796035767,\n  0.555809497833252,\n  0.5545330047607422,\n  0.5532552003860474,\n  0.5519760847091675,\n  0.5506957173347473,\n  0.5494139790534973,\n  0.548130989074707,\n  0.5468467473983765,\n  0.5455611348152161,\n  0.5442742705345154,\n  0.5429861545562744,\n  0.5416967272758484,\n  0.5404060482978821,\n  0.5391140580177307,\n  0.5378208756446838,\n  0.5365263223648071,\n  0.5352305769920349,\n  0.5339335799217224,\n  0.5326352715492249,\n  0.531335711479187,\n  0.5300349593162537,\n  0.5287328958511353,\n  0.5274296402931213,\n  0.5261251330375671,\n  0.5248193144798279,\n  0.5235123634338379,\n  0.5222041010856628,\n  0.5208946466445923,\n  0.5195839405059814,\n  0.5182720422744751,\n  0.5169588923454285,\n  0.5156445503234863,\n  0.5143289566040039,\n  0.513012170791626,\n  0.5116941928863525,\n  0.5103750228881836,\n  0.5090546011924744,\n  0.5077330470085144,\n  0.5064102411270142,\n  0.5050862431526184,\n  0.5037611126899719,\n  0.5024347305297852,\n  0.5011072158813477,\n  0.4997784495353699,\n  0.49844855070114136,\n  0.4971174895763397,\n  0.4957852363586426,\n  0.4944518208503723,\n  0.49311724305152893,\n  0.4917815327644348,\n  0.4904446303844452,\n  0.48910656571388245,\n  0.48776736855506897,\n  0.4864270091056824,\n  0.48508551716804504,\n  0.4837428629398346,\n  0.4823991060256958,\n  0.4810541868209839,\n  0.47970813512802124,\n  0.47836095094680786,\n  0.47701263427734375,\n  0.4756632149219513,\n  0.4743126630783081,\n  0.4729609787464142,\n  0.4716082215309143,\n  0.4702543020248413,\n  0.46889930963516235,\n  0.46754321455955505,\n  0.4661860167980194,\n  0.4648277163505554,\n  0.4634683132171631,\n  0.4621078073978424,\n  0.46074622869491577,\n  0.4593835771083832,\n  0.45801982283592224,\n  0.45665499567985535,\n  0.4552890956401825,\n  0.4539221227169037,\n  0.4525540769100189,\n  0.4511849880218506,\n  0.4498147964477539,\n  0.44844356179237366,\n  0.44707128405570984,\n  0.44569796323776245,\n  0.4443235695362091,\n  0.4429481327533722,\n  0.4415716528892517,\n  0.44019412994384766,\n  0.43881556391716003,\n  0.43743598461151123,\n  0.43605536222457886,\n  0.4346736967563629,\n  0.4332910478115082,\n  0.4319073557853699,\n  0.4305226504802704,\n  0.4291369318962097,\n  0.4277501702308655,\n  0.42636245489120483,\n  0.4249736964702606,\n  0.4235839545726776,\n  0.4221931993961334,\n  0.42080146074295044,\n  0.41940873861312866,\n  0.4180150330066681,\n  0.41662031412124634,\n  0.4152246415615082,\n  0.4138279855251312,\n  0.4124303460121155,\n  0.41103172302246094,\n  0.40963214635849,\n  0.40823161602020264,\n  0.4068301022052765,\n  0.4054276645183563,\n  0.40402424335479736,\n  0.402619868516922,\n  0.4012145400047302,\n  0.39980828762054443,\n  0.39840108156204224,\n  0.396992951631546,\n  0.3955838680267334,\n  0.39417386054992676,\n  0.3927629292011261,\n  0.3913510739803314,\n  0.3899382948875427,\n  0.38852459192276,\n  0.3871099650859833,\n  0.3856944441795349,\n  0.38427799940109253,\n  0.3828606605529785,\n  0.38144242763519287,\n  0.3800232708454132,\n  0.3786032497882843,\n  0.3771823048591614,\n  0.3757604956626892,\n  0.3743377923965454,\n  0.37291419506073,\n  0.3714897334575653,\n  0.3700644075870514,\n  0.36863818764686584,\n  0.36721113324165344,\n  0.3657831847667694,\n  0.36435437202453613,\n  0.362924724817276,\n  0.3614942133426666,\n  0.360062837600708,\n  0.35863062739372253,\n  0.3571975529193878,\n  0.35576364398002625,\n  0.3543289005756378,\n  0.35289332270622253,\n  0.3514569401741028,\n  0.3500196933746338,\n  0.3485816419124603,\n  0.34714275598526,\n  0.3457030653953552,\n  0.3442625403404236,\n  0.34282124042510986,\n  0.3413791060447693,\n  0.33993616700172424,\n  0.33849242329597473,\n  0.33704790472984314,\n  0.3356025815010071,\n  0.33415645360946655,\n  0.33270955085754395,\n  0.33126187324523926,\n  0.3298133909702301,\n  0.32836416363716125,\n  0.32691413164138794,\n  0.32546335458755493,\n  0.32401180267333984,\n  0.3225594758987427,\n  0.3211064040660858,\n  0.3196525573730469,\n  0.31819799542427063,\n  0.3167426586151123,\n  0.3152865767478943,\n  0.3138297498226166,\n  0.3123721778392792,\n  0.31091389060020447,\n  0.30945485830307007,\n  0.307995080947876,\n  0.3065345883369446,\n  0.3050733804702759,\n  0.3036114573478699,\n  0.30214881896972656,\n  0.30068546533584595,\n  0.299221396446228,\n  0.2977566421031952,\n  0.29629117250442505,\n  0.29482501745224,\n  0.2933581471443176,\n  0.29189059138298035,\n  0.29042235016822815,\n  0.28895342350006104,\n  0.2874838411808014,\n  0.28601354360580444,\n  0.28454259037971497,\n  0.28307098150253296,\n  0.28159868717193604,\n  0.2801257371902466,\n  0.2786521017551422,\n  0.2771778404712677,\n  0.27570292353630066,\n  0.2742273509502411,\n  0.272751122713089,\n  0.27127426862716675,\n  0.269796758890152,\n  0.26831862330436707,\n  0.266839861869812,\n  0.2653604745864868,\n  0.2638804614543915,\n  0.262399822473526,\n  0.2609185576438904,\n  0.2594366669654846,\n  0.2579541802406311,\n  0.25647109746932983,\n  0.2549873888492584,\n  0.25350308418273926,\n  0.2520182132720947,\n  0.25053271651268005,\n  0.24904663860797882,\n  0.24755996465682983,\n  0.24607272446155548,\n  0.24458488821983337,\n  0.2430964857339859,\n  0.24160750210285187,\n  0.24011796712875366,\n  0.2386278510093689,\n  0.23713718354701996,\n  0.23564594984054565,\n  0.23415414988994598,\n  0.23266181349754333,\n  0.2311689257621765,\n  0.2296755015850067,\n  0.22818152606487274,\n  0.2266870141029358,\n  0.22519196569919586,\n  0.22369639575481415,\n  0.22220028936862946,\n  0.22070367634296417,\n  0.2192065268754959,\n  0.21770887076854706,\n  0.21621069312095642,\n  0.2147120088338852,\n  0.21321281790733337,\n  0.21171313524246216,\n  0.21021294593811035,\n  0.20871224999427795,\n  0.20721107721328735,\n  0.20570941269397736,\n  0.20420727133750916,\n  0.20270463824272156,\n  0.20120152831077576,\n  0.19969795644283295,\n  0.19819389283657074,\n  0.19668938219547272,\n  0.1951843947172165,\n  0.19367896020412445,\n  0.1921730637550354,\n  0.19066670536994934,\n  0.18915991485118866,\n  0.18765266239643097,\n  0.18614497780799866,\n  0.18463686108589172,\n  0.18312829732894897,\n  0.1816193014383316,\n  0.1801098883152008,\n  0.17860004305839539,\n  0.17708978056907654,\n  0.17557910084724426,\n  0.17406800389289856,\n  0.17255648970603943,\n  0.17104458808898926,\n  0.16953226923942566,\n  0.16801954805850983,\n  0.16650643944740295,\n  0.16499294340610504,\n  0.1634790599346161,\n  0.1619647741317749,\n  0.16045011579990387,\n  0.158935084939003,\n  0.15741968154907227,\n  0.1559039056301117,\n  0.15438775718212128,\n  0.152871236205101,\n  0.1513543725013733,\n  0.14983715116977692,\n  0.1483195722103119,\n  0.1468016356229782,\n  0.14528335630893707,\n  0.14376474916934967,\n  0.14224578440189362,\n  0.1407264918088913,\n  0.1392068713903427,\n  0.13768692314624786,\n  0.13616664707660675,\n  0.13464605808258057,\n  0.13312514126300812,\n  0.1316039115190506,\n  0.1300823837518692,\n  0.12856054306030273,\n  0.1270383894443512,\n  0.12551595270633698,\n  0.12399320304393768,\n  0.1224701777100563,\n  0.12094685435295105,\n  0.11942324787378311,\n  0.11789935827255249,\n  0.11637520045042038,\n  0.11485075950622559,\n  0.1133260503411293,\n  0.11180107295513153,\n  0.11027583479881287,\n  0.10875033587217331,\n  0.10722457617521286,\n  0.10569857060909271,\n  0.10417231172323227,\n  0.10264581441879272,\n  0.10111907124519348,\n  0.09959208965301514,\n  0.09806486964225769,\n  0.09653741866350174,\n  0.09500974416732788,\n  0.09348184615373611,\n  0.09195373207330704,\n  0.09042539447546005,\n  0.08889684826135635,\n  0.08736808598041534,\n  0.08583912253379822,\n  0.08430995792150497,\n  0.08278059214353561,\n  0.08125103265047073,\n  0.07972127944231033,\n  0.07819133996963501,\n  0.07666122168302536,\n  0.07513091713190079,\n  0.07360043376684189,\n  0.07206977903842926,\n  0.0705389603972435,\n  0.06900797039270401,\n  0.06747681647539139,\n  0.06594550609588623,\n  0.06441403925418854,\n  0.0628824234008789,\n  0.06135065481066704,\n  0.05981874465942383,\n  0.05828669294714928,\n  0.05675450339913368,\n  0.05522217974066734,\n  0.053689729422330856,\n  0.05215714871883392,\n  0.05062444508075714,\n  0.04909162595868111,\n  0.04755868762731552,\n  0.04602564126253128,\n  0.044492483139038086,\n  0.042959220707416534,\n  0.041425857692956924,\n  0.039892397820949554,\n  0.038358841091394424,\n  0.03682519495487213,\n  0.035291463136672974,\n  0.03375764936208725,\n  0.03222375363111496,\n  0.0306897833943367,\n  0.02915574051439762,\n  0.02762162871658802,\n  0.026087453588843346,\n  0.024553215131163597,\n  0.023018918931484222,\n  0.02148456871509552,\n  0.01995016820728779,\n  0.018415721133351326,\n  0.016881229355931282,\n  0.015346699394285679,\n  0.013812132179737091,\n  0.012277533300220966,\n  0.010742904618382454,\n  0.009208250790834427,\n  0.007673575542867184,\n  0.0061388821341097355,\n  0.004604174289852381,\n  0.0030694555025547743,\n  0.0015347296139225364,\n  1.2246468525851679e-16\n]\n"
  },
  {
    "path": "__tests__/data/sine256.json",
    "content": "[\n  0,\n  0.012319659814238548,\n  0.02463744953274727,\n  0.03695150092244148,\n  0.04925994202494621,\n  0.06156090646982193,\n  0.0738525241613388,\n  0.08613293617963791,\n  0.09840027987957001,\n  0.11065268516540527,\n  0.12288828939199448,\n  0.13510525226593018,\n  0.14730170369148254,\n  0.15947578847408295,\n  0.17162567377090454,\n  0.1837495118379593,\n  0.19584546983242035,\n  0.2079116851091385,\n  0.21994635462760925,\n  0.2319476455450058,\n  0.24391372501850128,\n  0.25584277510643005,\n  0.26773300766944885,\n  0.27958258986473083,\n  0.29138973355293274,\n  0.3031526803970337,\n  0.31486958265304565,\n  0.32653871178627014,\n  0.3381582796573639,\n  0.34972649812698364,\n  0.3612416684627533,\n  0.3727020025253296,\n  0.38410574197769165,\n  0.39545121788978577,\n  0.4067366421222687,\n  0.41796034574508667,\n  0.42912060022354126,\n  0.44021573662757874,\n  0.451244056224823,\n  0.46220389008522034,\n  0.47309356927871704,\n  0.4839114248752594,\n  0.4946558475494385,\n  0.505325198173523,\n  0.5159178376197815,\n  0.5264321565628052,\n  0.5368666052818298,\n  0.5472195744514465,\n  0.5574894547462463,\n  0.5676746964454651,\n  0.5777738094329834,\n  0.5877852439880371,\n  0.5977074503898621,\n  0.6075389385223389,\n  0.6172782182693481,\n  0.6269237995147705,\n  0.6364742517471313,\n  0.6459280848503113,\n  0.6552838683128357,\n  0.66454017162323,\n  0.6736956238746643,\n  0.6827488541603088,\n  0.691698431968689,\n  0.7005430459976196,\n  0.709281325340271,\n  0.7179118990898132,\n  0.7264335751533508,\n  0.734844982624054,\n  0.7431448101997375,\n  0.7513318657875061,\n  0.7594048976898193,\n  0.767362654209137,\n  0.7752040028572083,\n  0.7829276323318481,\n  0.7905324101448059,\n  0.7980172038078308,\n  0.8053809404373169,\n  0.8126223683357239,\n  0.8197404742240906,\n  0.826734185218811,\n  0.8336023688316345,\n  0.8403440713882446,\n  0.8469582200050354,\n  0.8534438014030457,\n  0.859799861907959,\n  0.8660253882408142,\n  0.8721194863319397,\n  0.8780812621116638,\n  0.8839097023010254,\n  0.8896040320396423,\n  0.8951632976531982,\n  0.900586724281311,\n  0.9058734178543091,\n  0.9110226631164551,\n  0.9160336256027222,\n  0.9209055304527283,\n  0.9256376624107361,\n  0.9302293062210083,\n  0.9346797466278076,\n  0.9389883875846863,\n  0.9431544542312622,\n  0.9471773505210876,\n  0.9510565400123596,\n  0.9547913074493408,\n  0.9583812355995178,\n  0.9618256688117981,\n  0.9651240706443787,\n  0.9682760238647461,\n  0.9712810516357422,\n  0.974138617515564,\n  0.976848304271698,\n  0.9794097542762756,\n  0.9818225502967834,\n  0.9840863347053528,\n  0.986200749874115,\n  0.9881654977798462,\n  0.9899802207946777,\n  0.9916446805000305,\n  0.9931586384773254,\n  0.9945219159126282,\n  0.9957341551780701,\n  0.9967952966690063,\n  0.9977051615715027,\n  0.9984636306762695,\n  0.9990704655647278,\n  0.9995257258415222,\n  0.9998292326927185,\n  0.9999810457229614,\n  0.9999810457229614,\n  0.9998292326927185,\n  0.9995257258415222,\n  0.9990704655647278,\n  0.9984636306762695,\n  0.9977051615715027,\n  0.9967952966690063,\n  0.9957341551780701,\n  0.9945219159126282,\n  0.9931586384773254,\n  0.9916446805000305,\n  0.9899802207946777,\n  0.9881654977798462,\n  0.986200749874115,\n  0.9840863347053528,\n  0.9818225502967834,\n  0.9794097542762756,\n  0.976848304271698,\n  0.974138617515564,\n  0.9712810516357422,\n  0.9682760238647461,\n  0.9651240706443787,\n  0.9618256688117981,\n  0.9583812355995178,\n  0.9547913074493408,\n  0.9510565400123596,\n  0.9471773505210876,\n  0.9431544542312622,\n  0.9389883875846863,\n  0.9346797466278076,\n  0.9302293062210083,\n  0.9256376624107361,\n  0.9209055304527283,\n  0.9160336256027222,\n  0.9110226631164551,\n  0.9058734178543091,\n  0.900586724281311,\n  0.8951632976531982,\n  0.8896040320396423,\n  0.8839097023010254,\n  0.8780812621116638,\n  0.8721194863319397,\n  0.8660253882408142,\n  0.859799861907959,\n  0.8534438014030457,\n  0.8469582200050354,\n  0.8403440713882446,\n  0.8336023688316345,\n  0.826734185218811,\n  0.8197404742240906,\n  0.8126223683357239,\n  0.8053809404373169,\n  0.7980172038078308,\n  0.7905324101448059,\n  0.7829276323318481,\n  0.7752040028572083,\n  0.767362654209137,\n  0.7594048976898193,\n  0.7513318657875061,\n  0.7431448101997375,\n  0.734844982624054,\n  0.7264335751533508,\n  0.7179118990898132,\n  0.709281325340271,\n  0.7005430459976196,\n  0.691698431968689,\n  0.6827488541603088,\n  0.6736956238746643,\n  0.66454017162323,\n  0.6552838683128357,\n  0.6459280848503113,\n  0.6364742517471313,\n  0.6269237995147705,\n  0.6172782182693481,\n  0.6075389385223389,\n  0.5977074503898621,\n  0.5877852439880371,\n  0.5777738094329834,\n  0.5676746964454651,\n  0.5574894547462463,\n  0.5472195744514465,\n  0.5368666052818298,\n  0.5264321565628052,\n  0.5159178376197815,\n  0.505325198173523,\n  0.4946558475494385,\n  0.4839114248752594,\n  0.47309356927871704,\n  0.46220389008522034,\n  0.451244056224823,\n  0.44021573662757874,\n  0.42912060022354126,\n  0.41796034574508667,\n  0.4067366421222687,\n  0.39545121788978577,\n  0.38410574197769165,\n  0.3727020025253296,\n  0.3612416684627533,\n  0.34972649812698364,\n  0.3381582796573639,\n  0.32653871178627014,\n  0.31486958265304565,\n  0.3031526803970337,\n  0.29138973355293274,\n  0.27958258986473083,\n  0.26773300766944885,\n  0.25584277510643005,\n  0.24391372501850128,\n  0.2319476455450058,\n  0.21994635462760925,\n  0.2079116851091385,\n  0.19584546983242035,\n  0.1837495118379593,\n  0.17162567377090454,\n  0.15947578847408295,\n  0.14730170369148254,\n  0.13510525226593018,\n  0.12288828939199448,\n  0.11065268516540527,\n  0.09840027987957001,\n  0.08613293617963791,\n  0.0738525241613388,\n  0.06156090646982193,\n  0.04925994202494621,\n  0.03695150092244148,\n  0.02463744953274727,\n  0.012319659814238548,\n  1.2246468525851679e-16\n]\n"
  },
  {
    "path": "__tests__/data/sine512.json",
    "content": "[\n  0,\n  0.006147892214357853,\n  0.012295551598072052,\n  0.018442746251821518,\n  0.02458924427628517,\n  0.03073481284081936,\n  0.036879219114780426,\n  0.04302223399281502,\n  0.04916362091898918,\n  0.05530314892530441,\n  0.06144058704376221,\n  0.06757570058107376,\n  0.07370826601982117,\n  0.07983803749084473,\n  0.08596479892730713,\n  0.09208830446004868,\n  0.09820833802223206,\n  0.10432465374469757,\n  0.11043702811002731,\n  0.11654522269964218,\n  0.12264902144670486,\n  0.12874817848205566,\n  0.13484247028827667,\n  0.14093166589736938,\n  0.1470155268907547,\n  0.1530938446521759,\n  0.1591663658618927,\n  0.16523288190364838,\n  0.17129313945770264,\n  0.17734692990779877,\n  0.18339401483535767,\n  0.18943417072296143,\n  0.19546717405319214,\n  0.2014927715063095,\n  0.20751076936721802,\n  0.21352091431617737,\n  0.21952299773693085,\n  0.22551676630973816,\n  0.23150202631950378,\n  0.23747853934764862,\n  0.24344606697559357,\n  0.2494044005870819,\n  0.25535330176353455,\n  0.26129254698753357,\n  0.26722192764282227,\n  0.27314120531082153,\n  0.27905014157295227,\n  0.28494855761528015,\n  0.2908361852169037,\n  0.29671281576156616,\n  0.30257824063301086,\n  0.3084322214126587,\n  0.31427454948425293,\n  0.32010501623153687,\n  0.3259233832359314,\n  0.3317294120788574,\n  0.3375228941440582,\n  0.3433036506175995,\n  0.3490714132785797,\n  0.3548259735107422,\n  0.3605671226978302,\n  0.36629465222358704,\n  0.372008353471756,\n  0.37770795822143555,\n  0.3833933174610138,\n  0.38906416296958923,\n  0.39472031593322754,\n  0.4003615379333496,\n  0.4059876501560211,\n  0.41159841418266296,\n  0.41719359159469604,\n  0.4227730333805084,\n  0.4283364713191986,\n  0.4338837265968323,\n  0.4394145905971527,\n  0.4449288547039032,\n  0.45042628049850464,\n  0.4559066891670227,\n  0.4613698720932007,\n  0.46681562066078186,\n  0.47224369645118713,\n  0.47765395045280457,\n  0.48304614424705505,\n  0.4884200692176819,\n  0.49377554655075073,\n  0.4991123676300049,\n  0.5044302940368652,\n  0.5097292065620422,\n  0.515008807182312,\n  0.5202689170837402,\n  0.5255094170570374,\n  0.5307300686836243,\n  0.5359306335449219,\n  0.5411109328269958,\n  0.5462707877159119,\n  0.5514099597930908,\n  0.5565283298492432,\n  0.5616256594657898,\n  0.5667017698287964,\n  0.5717564225196838,\n  0.5767894983291626,\n  0.5818007588386536,\n  0.5867900252342224,\n  0.5917571783065796,\n  0.5967018604278564,\n  0.601624071598053,\n  0.6065235137939453,\n  0.6114000082015991,\n  0.6162534356117249,\n  0.6210835576057434,\n  0.6258901953697205,\n  0.6306731700897217,\n  0.6354323029518127,\n  0.6401674151420593,\n  0.6448783874511719,\n  0.6495649218559265,\n  0.6542268991470337,\n  0.6588642001152039,\n  0.6634765863418579,\n  0.6680638790130615,\n  0.6726258993148804,\n  0.6771625280380249,\n  0.6816735863685608,\n  0.6861588358879089,\n  0.6906181573867798,\n  0.695051372051239,\n  0.6994583010673523,\n  0.7038388252258301,\n  0.708192765712738,\n  0.7125198841094971,\n  0.7168201208114624,\n  0.7210932374000549,\n  0.7253391146659851,\n  0.7295575737953186,\n  0.7337484359741211,\n  0.737911581993103,\n  0.7420468330383301,\n  0.7461540102958679,\n  0.7502330541610718,\n  0.7542836666107178,\n  0.7583057880401611,\n  0.7622992992401123,\n  0.7662639617919922,\n  0.7701996564865112,\n  0.7741062045097351,\n  0.777983546257019,\n  0.7818315029144287,\n  0.785649836063385,\n  0.7894385457038879,\n  0.7931973934173584,\n  0.7969262599945068,\n  0.8006249666213989,\n  0.8042934536933899,\n  0.8079315423965454,\n  0.8115390539169312,\n  0.8151159286499023,\n  0.8186619877815247,\n  0.8221771121025085,\n  0.8256611227989197,\n  0.8291139602661133,\n  0.832535445690155,\n  0.8359254598617554,\n  0.8392838835716248,\n  0.8426105976104736,\n  0.8459054827690125,\n  0.8491683602333069,\n  0.8523991703987122,\n  0.855597734451294,\n  0.8587639331817627,\n  0.8618977069854736,\n  0.8649989366531372,\n  0.8680674433708191,\n  0.8711031079292297,\n  0.8741058707237244,\n  0.8770756125450134,\n  0.8800122141838074,\n  0.8829154968261719,\n  0.8857854604721069,\n  0.8886219263076782,\n  0.891424834728241,\n  0.8941940069198608,\n  0.8969293832778931,\n  0.8996308445930481,\n  0.9022983312606812,\n  0.9049317240715027,\n  0.9075309038162231,\n  0.910095751285553,\n  0.9126262664794922,\n  0.9151222109794617,\n  0.9175836443901062,\n  0.9200103282928467,\n  0.9224022626876831,\n  0.9247593283653259,\n  0.9270814657211304,\n  0.9293685555458069,\n  0.9316204786300659,\n  0.9338372349739075,\n  0.9360186457633972,\n  0.9381647109985352,\n  0.9402753114700317,\n  0.9423503875732422,\n  0.944389820098877,\n  0.946393609046936,\n  0.9483615756034851,\n  0.9502937197685242,\n  0.9521899223327637,\n  0.9540501832962036,\n  0.9558743238449097,\n  0.9576623439788818,\n  0.9594141840934753,\n  0.9611297845840454,\n  0.9628090262413025,\n  0.9644519090652466,\n  0.9660583138465881,\n  0.9676281809806824,\n  0.9691615104675293,\n  0.9706581830978394,\n  0.9721181988716125,\n  0.9735414385795593,\n  0.9749279022216797,\n  0.9762775301933289,\n  0.9775902032852173,\n  0.9788659811019897,\n  0.9801047444343567,\n  0.9813064932823181,\n  0.9824711084365845,\n  0.9835985898971558,\n  0.9846888780593872,\n  0.9857419729232788,\n  0.9867578148841858,\n  0.9877364039421082,\n  0.9886775612831116,\n  0.9895814061164856,\n  0.9904478788375854,\n  0.9912768602371216,\n  0.9920684099197388,\n  0.9928224086761475,\n  0.9935389757156372,\n  0.9942179322242737,\n  0.9948592782020569,\n  0.9954630732536316,\n  0.9960291981697083,\n  0.9965577125549316,\n  0.997048556804657,\n  0.9975017309188843,\n  0.9979171752929688,\n  0.9982948899269104,\n  0.9986348748207092,\n  0.9989371299743652,\n  0.9992016553878784,\n  0.999428391456604,\n  0.999617338180542,\n  0.9997684955596924,\n  0.9998818635940552,\n  0.9999575018882751,\n  0.9999952912330627,\n  0.9999952912330627,\n  0.9999575018882751,\n  0.9998818635940552,\n  0.9997684955596924,\n  0.999617338180542,\n  0.999428391456604,\n  0.9992016553878784,\n  0.9989371299743652,\n  0.9986348748207092,\n  0.9982948899269104,\n  0.9979171752929688,\n  0.9975017309188843,\n  0.997048556804657,\n  0.9965577125549316,\n  0.9960291981697083,\n  0.9954630732536316,\n  0.9948592782020569,\n  0.9942179322242737,\n  0.9935389757156372,\n  0.9928224086761475,\n  0.9920684099197388,\n  0.9912768602371216,\n  0.9904478788375854,\n  0.9895814061164856,\n  0.9886775612831116,\n  0.9877364039421082,\n  0.9867578148841858,\n  0.9857419729232788,\n  0.9846888780593872,\n  0.9835985898971558,\n  0.9824711084365845,\n  0.9813064932823181,\n  0.9801047444343567,\n  0.9788659811019897,\n  0.9775902032852173,\n  0.9762775301933289,\n  0.9749279022216797,\n  0.9735414385795593,\n  0.9721181988716125,\n  0.9706581830978394,\n  0.9691615104675293,\n  0.9676281809806824,\n  0.9660583138465881,\n  0.9644519090652466,\n  0.9628090262413025,\n  0.9611297845840454,\n  0.9594141840934753,\n  0.9576623439788818,\n  0.9558743238449097,\n  0.9540501832962036,\n  0.9521899223327637,\n  0.9502937197685242,\n  0.9483615756034851,\n  0.946393609046936,\n  0.944389820098877,\n  0.9423503875732422,\n  0.9402753114700317,\n  0.9381647109985352,\n  0.9360186457633972,\n  0.9338372349739075,\n  0.9316204786300659,\n  0.9293685555458069,\n  0.9270814657211304,\n  0.9247593283653259,\n  0.9224022626876831,\n  0.9200103282928467,\n  0.9175836443901062,\n  0.9151222109794617,\n  0.9126262664794922,\n  0.910095751285553,\n  0.9075309038162231,\n  0.9049317240715027,\n  0.9022983312606812,\n  0.8996308445930481,\n  0.8969293832778931,\n  0.8941940069198608,\n  0.891424834728241,\n  0.8886219263076782,\n  0.8857854604721069,\n  0.8829154968261719,\n  0.8800122141838074,\n  0.8770756125450134,\n  0.8741058707237244,\n  0.8711031079292297,\n  0.8680674433708191,\n  0.8649989366531372,\n  0.8618977069854736,\n  0.8587639331817627,\n  0.855597734451294,\n  0.8523991703987122,\n  0.8491683602333069,\n  0.8459054827690125,\n  0.8426105976104736,\n  0.8392838835716248,\n  0.8359254598617554,\n  0.832535445690155,\n  0.8291139602661133,\n  0.8256611227989197,\n  0.8221771121025085,\n  0.8186619877815247,\n  0.8151159286499023,\n  0.8115390539169312,\n  0.8079315423965454,\n  0.8042934536933899,\n  0.8006249666213989,\n  0.7969262599945068,\n  0.7931973934173584,\n  0.7894385457038879,\n  0.785649836063385,\n  0.7818315029144287,\n  0.777983546257019,\n  0.7741062045097351,\n  0.7701996564865112,\n  0.7662639617919922,\n  0.7622992992401123,\n  0.7583057880401611,\n  0.7542836666107178,\n  0.7502330541610718,\n  0.7461540102958679,\n  0.7420468330383301,\n  0.737911581993103,\n  0.7337484359741211,\n  0.7295575737953186,\n  0.7253391146659851,\n  0.7210932374000549,\n  0.7168201208114624,\n  0.7125198841094971,\n  0.708192765712738,\n  0.7038388252258301,\n  0.6994583010673523,\n  0.695051372051239,\n  0.6906181573867798,\n  0.6861588358879089,\n  0.6816735863685608,\n  0.6771625280380249,\n  0.6726258993148804,\n  0.6680638790130615,\n  0.6634765863418579,\n  0.6588642001152039,\n  0.6542268991470337,\n  0.6495649218559265,\n  0.6448783874511719,\n  0.6401674151420593,\n  0.6354323029518127,\n  0.6306731700897217,\n  0.6258901953697205,\n  0.6210835576057434,\n  0.6162534356117249,\n  0.6114000082015991,\n  0.6065235137939453,\n  0.601624071598053,\n  0.5967018604278564,\n  0.5917571783065796,\n  0.5867900252342224,\n  0.5818007588386536,\n  0.5767894983291626,\n  0.5717564225196838,\n  0.5667017698287964,\n  0.5616256594657898,\n  0.5565283298492432,\n  0.5514099597930908,\n  0.5462707877159119,\n  0.5411109328269958,\n  0.5359306335449219,\n  0.5307300686836243,\n  0.5255094170570374,\n  0.5202689170837402,\n  0.515008807182312,\n  0.5097292065620422,\n  0.5044302940368652,\n  0.4991123676300049,\n  0.49377554655075073,\n  0.4884200692176819,\n  0.48304614424705505,\n  0.47765395045280457,\n  0.47224369645118713,\n  0.46681562066078186,\n  0.4613698720932007,\n  0.4559066891670227,\n  0.45042628049850464,\n  0.4449288547039032,\n  0.4394145905971527,\n  0.4338837265968323,\n  0.4283364713191986,\n  0.4227730333805084,\n  0.41719359159469604,\n  0.41159841418266296,\n  0.4059876501560211,\n  0.4003615379333496,\n  0.39472031593322754,\n  0.38906416296958923,\n  0.3833933174610138,\n  0.37770795822143555,\n  0.372008353471756,\n  0.36629465222358704,\n  0.3605671226978302,\n  0.3548259735107422,\n  0.3490714132785797,\n  0.3433036506175995,\n  0.3375228941440582,\n  0.3317294120788574,\n  0.3259233832359314,\n  0.32010501623153687,\n  0.31427454948425293,\n  0.3084322214126587,\n  0.30257824063301086,\n  0.29671281576156616,\n  0.2908361852169037,\n  0.28494855761528015,\n  0.27905014157295227,\n  0.27314120531082153,\n  0.26722192764282227,\n  0.26129254698753357,\n  0.25535330176353455,\n  0.2494044005870819,\n  0.24344606697559357,\n  0.23747853934764862,\n  0.23150202631950378,\n  0.22551676630973816,\n  0.21952299773693085,\n  0.21352091431617737,\n  0.20751076936721802,\n  0.2014927715063095,\n  0.19546717405319214,\n  0.18943417072296143,\n  0.18339401483535767,\n  0.17734692990779877,\n  0.17129313945770264,\n  0.16523288190364838,\n  0.1591663658618927,\n  0.1530938446521759,\n  0.1470155268907547,\n  0.14093166589736938,\n  0.13484247028827667,\n  0.12874817848205566,\n  0.12264902144670486,\n  0.11654522269964218,\n  0.11043702811002731,\n  0.10432465374469757,\n  0.09820833802223206,\n  0.09208830446004868,\n  0.08596479892730713,\n  0.07983803749084473,\n  0.07370826601982117,\n  0.06757570058107376,\n  0.06144058704376221,\n  0.05530314892530441,\n  0.04916362091898918,\n  0.04302223399281502,\n  0.036879219114780426,\n  0.03073481284081936,\n  0.02458924427628517,\n  0.018442746251821518,\n  0.012295551598072052,\n  0.006147892214357853,\n  1.2246468525851679e-16\n]\n"
  },
  {
    "path": "__tests__/exports-node.ts",
    "content": "/**\n * This is required to trick typescript into thinking this file is a module\n * rather than a script. If this file is a script, it won't get its own scope\n * and EXPECTED_EXPORTS will be in the global scope, where it conflicts with\n * a variable of the same name in `exports-node.ts`.\n */\nexport {};\n\nconst EXPECTED_EXPORTS = [\n  \"audioContext\",\n  \"spn\",\n  \"bufferSize\",\n  \"sampleRate\",\n  \"melBands\",\n  \"chromaBands\",\n  \"callback\",\n  \"windowingFunction\",\n  \"featureExtractors\",\n  \"EXTRACTION_STARTED\",\n  \"numberOfMFCCCoefficients\",\n  \"numberOfBarkBands\",\n  \"_featuresToExtract\",\n  \"windowing\",\n  \"_errors\",\n  \"createMeydaAnalyzer\",\n  \"listAvailableFeatureExtractors\",\n  \"extract\",\n];\n\ndescribe(\"package exports\", () => {\n  test(\"meyda node exports at least currently expected fields\", () => {\n    var meyda = require(\"../dist/node/main\");\n\n    expect(Object.keys(meyda)).toEqual(EXPECTED_EXPORTS);\n  });\n});\n"
  },
  {
    "path": "__tests__/exports-web.ts",
    "content": "/**\n * @jest-environment jsdom\n */\n\n/**\n * This is required to trick typescript into thinking this file is a module\n * rather than a script. If this file is a script, it won't get its own scope\n * and EXPECTED_EXPORTS will be in the global scope, where it conflicts with\n * a variable of the same name in `exports-node.ts`.\n */\nexport {};\n\nconst EXPECTED_EXPORTS = [\n  \"audioContext\",\n  \"spn\",\n  \"bufferSize\",\n  \"sampleRate\",\n  \"melBands\",\n  \"chromaBands\",\n  \"callback\",\n  \"windowingFunction\",\n  \"featureExtractors\",\n  \"EXTRACTION_STARTED\",\n  \"numberOfMFCCCoefficients\",\n  \"numberOfBarkBands\",\n  \"_featuresToExtract\",\n  \"windowing\",\n  \"_errors\",\n  \"createMeydaAnalyzer\",\n  \"listAvailableFeatureExtractors\",\n  \"extract\",\n];\n\ndescribe(\"package exports\", () => {\n  test(\"meyda web exports at least currently expected fields\", () => {\n    expect(window[\"Meyda\"]).not.toBeDefined();\n    var meyda = require(\"../dist/web/meyda\");\n\n    expect(Object.keys(meyda)).toEqual(EXPECTED_EXPORTS);\n    expect(Object.keys(window[\"Meyda\"])).toEqual(EXPECTED_EXPORTS);\n    // @ts-ignore\n    delete window[\"Meyda\"];\n  });\n\n  test(\"meyda web min exports at least currently expected fields\", () => {\n    expect(global[\"Meyda\"]).not.toBeDefined();\n    var meyda = require(\"../dist/web/meyda.min\");\n\n    expect(Object.keys(meyda)).toEqual(EXPECTED_EXPORTS);\n    expect(Object.keys(global[\"Meyda\"])).toEqual(EXPECTED_EXPORTS);\n    // @ts-ignore\n    delete global[\"Meyda\"];\n  });\n});\n\ndescribe(\"package exports\", () => {\n  test(\"meyda node exports at least currently expected fields\", () => {\n    var meyda = require(\"../dist/node/main\");\n\n    expect(Object.keys(meyda)).toEqual(EXPECTED_EXPORTS);\n    expect(Object.keys(global[\"Meyda\"])).toEqual(EXPECTED_EXPORTS);\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/chroma.ts",
    "content": "import TestData from \"../TestData\";\nvar utilities = require(\"../../dist/node/utilities\");\n\n// Setup\nvar chroma = require(\"../../dist/node/extractors/chroma\");\n\ndescribe(\"chroma\", () => {\n  test(\"should return correct chroma value given a valid signal\", (done) => {\n    var chromagram = chroma({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      chromaFilterBank: utilities.createChromaFilterBank(12, 44100, 512),\n    });\n\n    for (var i in TestData.EXPECTED_CHROMAGRAM_OUTPUT) {\n      expect(\n        Math.abs(chromagram[i] - TestData.EXPECTED_CHROMAGRAM_OUTPUT[i])\n      ).toBeLessThanOrEqual(1e-5);\n    }\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var chromagram = chroma({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var chromagram = chroma();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var chromagram = chroma({ ampSpectrum: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/energy.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar energy = require(\"../../dist/node/extractors/energy\");\n\ndescribe(\"energy\", () => {\n  test(\"should return the correct value given a valid signal\", (done) => {\n    var en = energy({\n      signal: TestData.VALID_SIGNAL,\n    });\n\n    expect(en).toEqual(3.6735467237693653);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = energy({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = energy();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = energy({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/loudness.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar loudness = require(\"../../dist/node/extractors/loudness\");\n\ndescribe(\"loudness\", () => {\n  test(\"should return correct value given a valid signal\", (done) => {\n    var en = loudness({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      barkScale: TestData.VALID_BARK_SCALE,\n    });\n\n    expect(en).toEqual({\n      specific: new Float32Array([\n        0.8241609334945679, 0.971539318561554, 0.7246851921081543,\n        0.868057370185852, 0.9084116816520691, 0.5983786582946777,\n        0.8250990509986877, 0.8279480338096619, 0.6802764534950256,\n        0.6513881683349609, 0.6347343325614929, 0.6553743481636047,\n        0.6563374996185303, 0.7111011147499084, 0.694219172000885,\n        0.7696076035499573, 0.677422285079956, 0.6804705262184143,\n        0.668949544429779, 0.6583544611930847, 0.8762503862380981,\n        0.7247303128242493, 0.7742922306060791, 0.8974387645721436,\n      ]),\n      total: 17.959227442741394,\n    });\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = loudness({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = loudness();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = loudness({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/melBands.ts",
    "content": "import TestData from \"../TestData\";\nvar utilities = require(\"../../dist/node/utilities\");\n\n// Setup\nvar melBands = require(\"../../dist/node/extractors/melBands\");\n\ndescribe(\"melBands\", () => {\n  test(\"should return correct melBands value given a valid signal\", (done) => {\n    var en = melBands({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      melFilterBank: utilities.createMelFilterBank(26, 44100, 512),\n    });\n\n    const expectedValues = [\n      0.05362230911850929, 0.5754691362380981, 0.18804392218589783,\n      0.25777846574783325, 0.14160922169685364, 0.09012959152460098,\n      0.08216794580221176, 0.020733006298542023, 0.01394730806350708,\n      0.008802562952041626, 0.01255915779620409, 0.011275732889771461,\n      0.01811823807656765, 0.00460180826485157, 0.0031142467632889748,\n      0.00262887473218143, 0.0025565065443515778, 0.0038858000189065933,\n      0.03446952626109123, 0.004388371482491493, 0.00174950051587075,\n      0.0015815229853615165, 0.0013017841847613454, 0.0012407194590196013,\n      0.0012172914575785398, 0.001246776431798935,\n    ];\n\n    expect(expectedValues).toEqual(en);\n    expect(expectedValues.length).toEqual(en.length);\n    done();\n  });\n\n  test(\"should return only 3 correct melBands values given a valid signal\", (done) => {\n    var en = melBands({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      melFilterBank: utilities.createMelFilterBank(3, 44100, 512),\n    });\n\n    expect(3).toEqual(en.length);\n    done();\n  });\n\n  test(\"should return only 40 correct melBands values given a valid signal\", (done) => {\n    var en = melBands({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      melFilterBank: utilities.createMelFilterBank(40, 44100, 512),\n    });\n\n    expect(40).toEqual(en.length);\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = melBands({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = melBands();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = melBands({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/mfcc.ts",
    "content": "import TestData from \"../TestData\";\nvar utilities = require(\"../../dist/node/utilities\");\n\n// Setup\nvar mfcc = require(\"../../dist/node/extractors/mfcc\");\n\ndescribe(\"mfcc\", () => {\n  test(\"should return correct mfcc value given a valid signal\", (done) => {\n    var en = mfcc({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      melFilterBank: utilities.createMelFilterBank(26, 44100, 512),\n    });\n\n    const expectedValues = [\n      3.0764786549843848, 2.5565860160012903, 1.864506100880325,\n      1.2335562677762721, 0.4988162523764804, 0.09087259136810752,\n      -0.20585442699270234, -0.44269584674462054, -0.3253486567336908,\n      -0.37584086978198183, -0.5572731218776171, -0.5245475651926765,\n      -0.6215721667512493,\n    ];\n\n    expect(expectedValues.length).toEqual(en.length);\n\n    for (var index in en) {\n      expect(Math.abs(en[index] - expectedValues[index])).toBeLessThanOrEqual(\n        1e-15\n      );\n    }\n\n    done();\n  });\n\n  test(\"should return only 3 correct mfcc values given a valid signal\", (done) => {\n    var en = mfcc({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      melFilterBank: utilities.createMelFilterBank(26, 44100, 512),\n      numberOfMFCCCoefficients: 3,\n    });\n\n    const expectedValues = [\n      3.0764786549843848, 2.5565860160012903, 1.864506100880325,\n    ];\n\n    expect(expectedValues.length).toEqual(en.length);\n\n    for (var index in en) {\n      expect(Math.abs(en[index] - expectedValues[index])).toBeLessThanOrEqual(\n        1e-15\n      );\n    }\n\n    done();\n  });\n\n  test(\"should return only 40 correct mfcc values given a valid signal\", (done) => {\n    var en = mfcc({\n      sampleRate: 44100,\n      bufferSize: 512,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      melFilterBank: utilities.createMelFilterBank(40, 44100, 512),\n      numberOfMFCCCoefficients: 40,\n    });\n\n    const expectedValues = [\n      3.162861616932787, 2.631774226264287, 1.9119808162845584,\n      1.2514199153407288, 0.486397957822833, 0.05257906181539599,\n      -0.2520045416286077, -0.49585735294546857, -0.38466316958263563,\n      -0.44818175405724836, -0.6672513607241057, -0.6686735919108686,\n      -0.789241040586372, -0.855968554812388, -0.7559012649440329,\n      -0.8343554237381223, -0.799337605151172, -0.7238357489234062,\n      -0.8688463927736684, -0.8087429188034788, -0.6673245235771227,\n      -0.6080509624742819, -0.3249701900706408, -0.08770548307506015,\n      0.06286020820571536, 0.29333780777697666, 0.2784715992409729,\n      0.23014381333962616, 0.3500576154282103, 0.33428294279172033,\n      0.40985070990105343, 0.6339035754249981, 0.7927495440032222,\n      1.1026760276121124, 1.364591123252153, 1.4136099189401947,\n      1.5027304491725944, 1.3659130982845602, 0.9699232061961626,\n      0.5762094772418701,\n    ];\n\n    expect(expectedValues.length).toEqual(en.length);\n\n    for (var index in en) {\n      expect(Math.abs(en[index] - expectedValues[index])).toBeLessThanOrEqual(\n        1e-15\n      );\n    }\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = mfcc({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = mfcc();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = mfcc({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/perceptualSharpness.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar percSharp = require(\"../../dist/node/extractors/perceptualSharpness\");\n\ndescribe(\"percSharp\", () => {\n  test(\"should return percSharp value given a valid signal\", (done) => {\n    var en = percSharp({\n      signal: TestData.VALID_SIGNAL,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      barkScale: TestData.VALID_BARK_SCALE,\n    });\n\n    expect(en).toEqual(0.6469286541680944);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = percSharp({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = percSharp();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = percSharp({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/perceptualSpread.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar perceptualSpread = require(\"../../dist/node/extractors/perceptualSpread\");\n\ndescribe(\"perceptualSpread\", () => {\n  test(\"should return correct Spread value given valid signal\", (done) => {\n    var en = perceptualSpread({\n      signal: TestData.VALID_SIGNAL,\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      barkScale: TestData.VALID_BARK_SCALE,\n    });\n\n    expect(en).toEqual(0.8947325916336791);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = perceptualSpread({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = perceptualSpread();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = perceptualSpread({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/powerSpectrum.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar powerSpectrum = require(\"../../dist/node/extractors/powerSpectrum\");\n\ndescribe(\"powerSpectrum\", () => {\n  test(\"should return correct Power Spectrum value\", (done) => {\n    var en = powerSpectrum({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    expect(en).toEqual(TestData.EXPECTED_POWER_SPECTRUM_OUTPUT);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = powerSpectrum({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = powerSpectrum();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = powerSpectrum({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/rms.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar rms = require(\"../../dist/node/extractors/rms\");\n\ndescribe(\"rms\", () => {\n  test(\"should return correct rms value given a valid signal\", (done) => {\n    var en = rms({\n      signal: TestData.VALID_SIGNAL,\n    });\n\n    expect(en).toEqual(0.08470475751020153);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = rms({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = rms();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = rms({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralCentroid.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralCentroid = require(\"../../dist/node/extractors/spectralCentroid\");\n\ndescribe(\"spectralCentroid\", () => {\n  test(\"should return correct Spectral Centroid value\", (done) => {\n    var en = spectralCentroid({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    expect(en).toEqual(45.12823119078897);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralCentroid({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralCentroid();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralCentroid({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralCrest.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralCrest = require(\"../../dist/node/extractors/spectralCrest\");\n\ndescribe(\"spectralCrest\", () => {\n  test(\"should return correct spectrla crest value\", (done) => {\n    var en = spectralCrest({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    expect(en).toEqual(10.35858484810692);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralCrest({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralCrest();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralCrest({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralFlatness.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralFlatness = require(\"../../dist/node/extractors/spectralFlatness\");\n\ndescribe(\"spectralFlatness\", () => {\n  test(\"should return correct Spectral Flatness value\", (done) => {\n    var en = spectralFlatness({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    // Node 7 adds precision to Math.exp, we use Chai's approximate assertion\n    // to account for the extra precision.\n    expect(Math.abs(en - 0.4395908170404335)).toBeLessThanOrEqual(1e-16);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralFlatness({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralFlatness();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralFlatness({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralKurtosis.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralKurtosis = require(\"../../dist/node/extractors/spectralKurtosis\");\n\ndescribe(\"spectralKurtosis\", () => {\n  test(\"should return correct Spectral Kurtosis value\", (done) => {\n    var en = spectralKurtosis({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    expect(Math.abs(en - 0.1511072674115075)).toBeLessThanOrEqual(1e-15);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralKurtosis({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralKurtosis();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralKurtosis({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralRolloff.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralRolloff = require(\"../../dist/node/extractors/spectralRolloff\");\n\ndescribe(\"spectralRolloff\", () => {\n  test(\"should return correct Spectral Rolloff value\", (done) => {\n    var en = spectralRolloff({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      sampleRate: 44100,\n    });\n\n    expect(en).toEqual(21012.35294117647);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralRolloff({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralRolloff();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralRolloff({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralSkewness.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralSkewness = require(\"../../dist/node/extractors/spectralSkewness\");\n\ndescribe(\"spectralSkewness\", () => {\n  test(\"should return correct Spectral Skewness value\", (done) => {\n    var en = spectralSkewness({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    expect(en).toEqual(1.6950674362270297);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralSkewness({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralSkewness();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralSkewness({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralSlope.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralSlope = require(\"../../dist/node/extractors/spectralSlope\");\n\ndescribe(\"spectralSlope\", () => {\n  test(\"should return correct Spectral Slope value\", (done) => {\n    var en = spectralSlope({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n      sampleRate: 44100,\n      bufferSize: 512,\n    });\n\n    expect(en < 0.0000003).toEqual(true);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralSlope({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralSlope();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralSlope({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/spectralSpread.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar spectralSpread = require(\"../../dist/node/extractors/spectralSpread\");\n\ndescribe(\"spectralSpread\", () => {\n  test(\"should return correct Spectral Spread value\", (done) => {\n    var en = spectralSpread({\n      ampSpectrum: TestData.VALID_AMPLITUDE_SPECTRUM,\n    });\n\n    expect(en).toEqual(61.47230858577843);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = spectralSpread({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = spectralSpread();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = spectralSpread({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/extractors/zcr.ts",
    "content": "import TestData from \"../TestData\";\n\n// Setup\nvar zcr = require(\"../../dist/node/extractors/zcr\");\n\ndescribe(\"zcr\", () => {\n  test(\"should return correct zcr value\", (done) => {\n    var en = zcr({\n      signal: TestData.VALID_SIGNAL,\n    });\n\n    expect(en).toEqual(35);\n\n    done();\n  });\n\n  test(\"should throw an error when passed an empty object\", (done) => {\n    try {\n      var en = zcr({});\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when not passed anything\", (done) => {\n    try {\n      var en = zcr();\n    } catch (e) {\n      done();\n    }\n  });\n\n  test(\"should throw an error when passed something invalid\", (done) => {\n    try {\n      var en = zcr({ signal: \"not a signal\" });\n    } catch (e) {\n      done();\n    }\n  });\n});\n"
  },
  {
    "path": "__tests__/featureExtractors.ts",
    "content": "var fs = require(\"fs\");\n\n// Setup\nvar featureExtractors = require(\"../dist/node/featureExtractors\");\n\ndescribe(\"featureExtractors\", () => {\n  test(\"should provide all of the feature extractors\", () => {\n    var featureExtractorsProvided = fs.readdirSync(\"./dist/node/extractors\", {\n      withFileTypes: true,\n    });\n    featureExtractorsProvided = featureExtractorsProvided\n      .filter((value) => value.isFile())\n      .map(function ({ name }) {\n        return name.substr(0, name.lastIndexOf(\".\")) || name;\n      });\n\n    featureExtractorsProvided.push(\"buffer\");\n    featureExtractorsProvided.push(\"complexSpectrum\");\n    featureExtractorsProvided.push(\"amplitudeSpectrum\");\n    featureExtractorsProvided.splice(\n      featureExtractorsProvided.indexOf(\"extractorUtilities\"),\n      1\n    );\n\n    expect(new Set(Object.keys(featureExtractors))).toEqual(\n      new Set(featureExtractorsProvided)\n    );\n  });\n});\n"
  },
  {
    "path": "__tests__/main.ts",
    "content": "var meyda = require(\"../dist/node/main\");\n// trick ts into treating this file as a module\nexport {};\n\ndescribe(\"main\", () => {\n  test(\"should call an extractor when asked to\", (done) => {\n    done();\n  });\n\n  test(\"list feature extractors\", () => {\n    const availableFeatureExtractors = meyda.listAvailableFeatureExtractors();\n    expect(Array.isArray(availableFeatureExtractors));\n    availableFeatureExtractors.forEach((extractor) => {\n      expect(typeof extractor).toBe(\"string\");\n    });\n  });\n});\n"
  },
  {
    "path": "__tests__/utilities.ts",
    "content": "var util = require(\"../dist/node/utilities\");\n\ndescribe(\"isPowerOfTwo\", () => {\n  test(\"should validate all powers of two\", (done) => {\n    for (var i = 0; i < 1000; i++) {\n      const result = util.isPowerOfTwo(Math.pow(2, i));\n      if (result !== true) {\n        done(new Error(\"isPowerOfTwo failed for \" + i));\n      }\n    }\n\n    done();\n  });\n\n  test(\"should fail for non-powers of two\", (done) => {\n    expect(util.isPowerOfTwo(3)).toBe(false);\n    expect(util.isPowerOfTwo(348)).toBe(false);\n    expect(util.isPowerOfTwo(29384)).toBe(false);\n    expect(util.isPowerOfTwo(3489410)).toBe(false);\n    done();\n  });\n});\n\ndescribe(\"error\", () => {\n  test(\"throws an error with the correct message\", (done) => {\n    var message = \"Test Error Message\";\n    expect(function () {\n      util.error(message);\n    }).toThrow();\n\n    done();\n  });\n});\n\ndescribe(\"pointwiseBufferMult\", () => {\n  test(\"multiplies two arrays correctly\", (done) => {\n    expect(util.pointwiseBufferMult([4, 5, 6], [0.5, 2, 2])).toEqual([\n      2, 10, 12,\n    ]);\n    done();\n  });\n\n  test(\"handles differently sized arrays correctly\", (done) => {\n    expect(util.pointwiseBufferMult([4, 0.25, 0.7], [0.25, 2])).toEqual([\n      1, 0.5,\n    ]);\n    done();\n  });\n});\n\ndescribe(\"applyWindow\", () => {\n  test(\"applies a windowing function to a buffer\", (done) => {\n    expect(util.applyWindow([1, 4, 6], \"hanning\")).toEqual([0, 4, 0]);\n    done();\n  });\n});\n\ndescribe(\"frame\", () => {\n  test(\"returns the expected number of frames for hop size < buffer size\", () => {\n    const frames = util.frame(new Array(2048).fill(0), 1024, 512);\n    expect(frames.length).toEqual(3);\n  });\n\n  test(\"returns the expected number of frames for hop size === buffer size\", () => {\n    const frames = util.frame(new Array(2048).fill(0), 1024, 1024);\n    expect(frames.length).toEqual(2);\n  });\n\n  test(\"returns the expected number of frames where buffer size isn't a hop size multiple\", () => {\n    const frames = util.frame(new Array(2048).fill(0), 1024, 500);\n    expect(frames.length).toEqual(3);\n  });\n});\n"
  },
  {
    "path": "__tests__/windowing.ts",
    "content": "var windowing = require(\"../dist/node/windowing\");\n\nvar blackman128 = require(\"./data/blackman128.json\");\nvar blackman256 = require(\"./data/blackman256.json\");\nvar blackman512 = require(\"./data/blackman512.json\");\nvar blackman1024 = require(\"./data/blackman1024.json\");\nvar blackman2048 = require(\"./data/blackman2048.json\");\nvar hanning128 = require(\"./data/hanning128.json\");\nvar hanning256 = require(\"./data/hanning256.json\");\nvar hanning512 = require(\"./data/hanning512.json\");\nvar hanning1024 = require(\"./data/hanning1024.json\");\nvar hanning2048 = require(\"./data/hanning2048.json\");\nvar hamming128 = require(\"./data/hamming128.json\");\nvar hamming256 = require(\"./data/hamming256.json\");\nvar hamming512 = require(\"./data/hamming512.json\");\nvar hamming1024 = require(\"./data/hamming1024.json\");\nvar hamming2048 = require(\"./data/hamming2048.json\");\nvar sine128 = require(\"./data/sine128.json\");\nvar sine256 = require(\"./data/sine256.json\");\nvar sine512 = require(\"./data/sine512.json\");\nvar sine1024 = require(\"./data/sine1024.json\");\nvar sine2048 = require(\"./data/sine2048.json\");\n\ndescribe(\"windowing\", () => {\n  test(\"should generate a correct 128 bin blackman window\", (done) => {\n    expect(windowing.blackman(128)).toEqual(Float32Array.from(blackman128));\n    done();\n  });\n\n  test(\"should generate a correct 256 bin blackman window\", (done) => {\n    expect(windowing.blackman(256)).toEqual(Float32Array.from(blackman256));\n    done();\n  });\n\n  test(\"should generate a correct 512 bin blackman window\", (done) => {\n    expect(windowing.blackman(512)).toEqual(Float32Array.from(blackman512));\n    done();\n  });\n\n  test(\"should generate a correct 1024 bin blackman window\", (done) => {\n    expect(windowing.blackman(1024)).toEqual(Float32Array.from(blackman1024));\n    done();\n  });\n\n  test(\"should generate a correct 2048 bin blackman window\", (done) => {\n    expect(windowing.blackman(2048)).toEqual(Float32Array.from(blackman2048));\n    done();\n  });\n\n  test(\"should generate a correct 128 bin hanning window\", (done) => {\n    expect(windowing.hanning(128)).toEqual(Float32Array.from(hanning128));\n    done();\n  });\n\n  test(\"should generate a correct 256 bin hanning window\", (done) => {\n    expect(windowing.hanning(256)).toEqual(Float32Array.from(hanning256));\n    done();\n  });\n\n  test(\"should generate a correct 512 bin hanning window\", (done) => {\n    expect(windowing.hanning(512)).toEqual(Float32Array.from(hanning512));\n    done();\n  });\n\n  test(\"should generate a correct 1024 bin hanning window\", (done) => {\n    expect(windowing.hanning(1024)).toEqual(Float32Array.from(hanning1024));\n    done();\n  });\n\n  test(\"should generate a correct 2048 bin hanning window\", (done) => {\n    expect(windowing.hanning(2048)).toEqual(Float32Array.from(hanning2048));\n    done();\n  });\n\n  test(\"should generate a correct 128 bin hamming window\", (done) => {\n    expect(windowing.hamming(128)).toEqual(Float32Array.from(hamming128));\n    done();\n  });\n\n  test(\"should generate a correct 256 bin hamming window\", (done) => {\n    expect(windowing.hamming(256)).toEqual(Float32Array.from(hamming256));\n    done();\n  });\n\n  test(\"should generate a correct 512 bin hamming window\", (done) => {\n    expect(windowing.hamming(512)).toEqual(Float32Array.from(hamming512));\n    done();\n  });\n\n  test(\"should generate a correct 1024 bin hamming window\", (done) => {\n    expect(windowing.hamming(1024)).toEqual(Float32Array.from(hamming1024));\n    done();\n  });\n\n  test(\"should generate a correct 2048 bin hamming window\", (done) => {\n    expect(windowing.hamming(2048)).toEqual(Float32Array.from(hamming2048));\n    done();\n  });\n\n  test(\"should generate a correct 128 bin sine window\", (done) => {\n    expect(windowing.sine(128)).toEqual(Float32Array.from(sine128));\n    done();\n  });\n\n  test(\"should generate a correct 256 bin sine window\", (done) => {\n    expect(windowing.sine(256)).toEqual(Float32Array.from(sine256));\n    done();\n  });\n\n  test(\"should generate a correct 512 bin sine window\", (done) => {\n    expect(windowing.sine(512)).toEqual(Float32Array.from(sine512));\n    done();\n  });\n\n  test(\"should generate a correct 1024 bin sine window\", (done) => {\n    expect(windowing.sine(1024)).toEqual(Float32Array.from(sine1024));\n    done();\n  });\n\n  test(\"should generate a correct 2048 bin sine window\", (done) => {\n    expect(windowing.sine(2048)).toEqual(Float32Array.from(sine2048));\n    done();\n  });\n});\n"
  },
  {
    "path": "bin/cli.js",
    "content": "#! /usr/bin/env node\n\n(function () {\n  \"use strict\";\n\n  var opt = require(\"node-getopt\")\n    .create([\n      [\n        \"\",\n        \"o[=OUTPUT_FILE]\",\n        \"Path to output file (optional, if not specified prints to console\",\n      ],\n      [\n        \"\",\n        \"bs[=BUFFER_SIZE]\",\n        \"Buffer size in samples (optional, default is 512)\",\n      ],\n      [\n        \"\",\n        \"mfcc[=MFCC_COEFFICIENTS]\",\n        \"Number of MFCC co-efficients that the MFCC feature extractor should return (optional, default is 13)\",\n      ],\n      [\n        \"\",\n        \"hs[=HOP_SIZE]\",\n        \"Hop size in samples (optional, defaults to matching buffer size)\",\n      ],\n      [\n        \"\",\n        \"w[=WINDOWING_FUNCTION]\",\n        \"Windowing function (optional, default is hanning)\",\n      ],\n      [\n        \"\",\n        \"format[=FORMAT_TYPE]\",\n        \"Type of output file (optional, default is csv)\",\n      ],\n      [\n        \"p\",\n        \"\",\n        \"Disables some of the logging and outputs data to stdout, useful for piping\",\n      ],\n      [\"h\", \"help\", \"Display help\"],\n    ])\n    .bindHelp()\n    .parseSystem();\n\n  if (!opt.argv.length) throw new Error(\"Input file was not specified.\");\n  else if (opt.argv.length < 2) throw new Error(\"No features specified.\");\n  else if (opt.options.p && opt.options.o)\n    throw new Error(\"Please choose either -p or --o.\");\n  else if (\n    opt.options.format &&\n    opt.options.format != \"json\" &&\n    opt.options.format != \"csv\"\n  )\n    throw new Error(\"Invalid output format. Please choose either json or csv.\");\n\n  var Meyda = require(\"../dist/node/main.js\");\n  var WavLoader = require(\"./wav-loader.js\");\n  var fs = require(\"fs\");\n\n  var FRAME_SIZE = parseInt(opt.options.bs) || 512;\n  var HOP_SIZE = parseInt(opt.options.hs) || FRAME_SIZE;\n  var MFCC_COEFFICIENTS = parseInt(opt.options.mfcc) || 13;\n  Meyda.bufferSize = FRAME_SIZE;\n  Meyda.hopSize = HOP_SIZE;\n  Meyda.windowingFunction = opt.options.w || \"hanning\";\n  Meyda.numberOfMFCCCoefficients = MFCC_COEFFICIENTS;\n\n  var outputFormat = null;\n  if (opt.options.o) {\n    outputFormat = opt.options.format || \"csv\";\n  }\n  var features = {};\n  var featuresToExtract = opt.argv.slice(1);\n\n  for (var i = 0; i < featuresToExtract.length; i++) {\n    features[featuresToExtract[i]] = [];\n  }\n\n  // utility to convert typed arrays to normal arrays\n  function typedToArray(t) {\n    return Array.prototype.slice.call(t);\n  }\n\n  // utility to convert arrays to typed F32 arrays\n  function arrayToTyped(t) {\n    return Float32Array.from(t);\n  }\n\n  function output(val) {\n    if (!opt.options.o || opt.options.p) {\n      process.stdout.write(val);\n    } else {\n      wstream.write(val);\n    }\n  }\n\n  //helper method to extract features for this chunk\n  function extractFeatures(chunk) {\n    //make it a F32A for efficiency\n    var frame = arrayToTyped(chunk);\n    //run the extraction of selected features\n    var fset = Meyda.extract(featuresToExtract, frame);\n    for (let j = 0; j < featuresToExtract.length; j++) {\n      const feature = fset[featuresToExtract[j]];\n      features[featuresToExtract[j]].push(feature);\n    }\n  }\n\n  if (opt.options.o && !opt.options.p) {\n    var wstream = fs.createWriteStream(opt.options.o);\n  }\n\n  //this is a buffer\n  var buffer = [];\n  var frameCount = 0;\n\n  if (!opt.options.p) {\n    //cosmetics\n    console.log(\"\\n=========\\nMeyda CLI\\n=========\\n\\n\");\n    console.log(\"Buffer size: \" + FRAME_SIZE);\n    console.log(\"Hop size: \" + HOP_SIZE);\n    console.log(\"Windowing function: \" + Meyda.windowingFunction);\n    console.log(\"Will extract:\");\n    //log features to extract\n    featuresToExtract.forEach(function (f, i, a) {\n      process.stdout.write(f + \" \");\n    });\n\n    process.stdout.write(\"\\n\\nStarting extraction...\\n|\");\n  }\n\n  var wl = new WavLoader(\n    function (config) {\n      Meyda.sampleRate = config.sampleRate;\n      if (!opt.options.p) {\n        console.log(\"Sample rate recognized as: \" + Meyda.sampleRate);\n      }\n    },\n    function (chunk) {\n      //convert to normal array so we can concatenate\n      var _chunk = typedToArray(chunk);\n      buffer = buffer.concat(_chunk);\n      //if we're long enough, splice the frame, and extract features on it\n      while (buffer.length >= FRAME_SIZE) {\n        extractFeatures(buffer.slice(0, FRAME_SIZE));\n        buffer.splice(0, HOP_SIZE);\n        if (!opt.options.p) process.stdout.write(\"-\");\n        frameCount++;\n      }\n    },\n    function (data) {\n      //check if there's still something left in our buffer\n      if (buffer.length) {\n        //zero pad the buffer at the end so we get a full frame (needed for successful spectral analysis)\n        for (let i = buffer.length; i < 2 * FRAME_SIZE - HOP_SIZE; i++) {\n          buffer.push(0);\n        }\n        //extract features for zero-padded frame\n        while (buffer.length >= FRAME_SIZE) {\n          extractFeatures(buffer.slice(0, FRAME_SIZE));\n          buffer.splice(0, HOP_SIZE);\n          if (!opt.options.p) process.stdout.write(\"-\");\n          frameCount++;\n        }\n      }\n\n      // only print out information if piping flag is disabled.\n      if (!opt.options.p) {\n        process.stdout.write(\"-|\\nExtraction finished.\\n\\n\");\n        console.log(frameCount + \" frames analysed.\\n\");\n      }\n\n      // if output to file is enabled.\n      if (opt.options.o) {\n        if (outputFormat == \"json\") {\n          process.stdout.write(\"Writing to \" + opt.options.o + \"...\\n\");\n          output(JSON.stringify(features, null, 4));\n        } else if (outputFormat == \"csv\") {\n          process.stdout.write(\"Writing to \" + opt.options.o + \"...\\n\");\n          for (let i = 0; i < featuresToExtract.length; i++) {\n            output(featuresToExtract[i].toString());\n            output(i == featuresToExtract.length - 1 ? \"\" : \",\");\n          }\n\n          output(\"\\n\");\n          for (let i = 0; i < frameCount; i++) {\n            for (let j = 0; j < featuresToExtract.length; j++) {\n              const feature = features[featuresToExtract[j]];\n              if (typeof feature[i] === \"object\") {\n                for (let f = 0; f < Object.keys(feature[i]).length; f++)\n                  output(feature[i][f] + \",\");\n                output(j == featuresToExtract.length - 1 ? \"\" : \",\");\n              } else {\n                output(feature[i].toString());\n                output(j == featuresToExtract.length - 1 ? \"\" : \",\");\n              }\n            }\n            output(\"\\n\");\n          }\n        }\n        console.log(\"Done.\");\n        wstream.end();\n        console.log(\"\");\n      } else {\n        // if there is no output flag, print to console.\n        for (let j = 0; j < featuresToExtract.length; j++) {\n          output(\n            \"\\n*********\" + featuresToExtract[j].toString() + \"*********\\n\\n\"\n          );\n\n          for (let i = 0; i < frameCount; i++) {\n            var feature = features[featuresToExtract[j]];\n            if (typeof feature[i] === \"object\") {\n              var keys = Object.keys(feature[i]);\n              for (let f = 0; f < keys.length; f++) {\n                output(feature[i][keys[f]] + \"\");\n                output(f == keys.length - 1 ? \"\\n\" : \",\");\n              }\n            } else {\n              output(feature[i].toString());\n              output(\"\\n\");\n            }\n          }\n          output(\"\\n\");\n        }\n      }\n      //get averages\n      for (let j = 0; j < featuresToExtract.length; j++) {\n        //check if this feature returns arrays\n        if (typeof features[featuresToExtract[j]][0] != \"object\")\n          //if not, calculate average\n          console.log(\n            \"Average \" +\n              featuresToExtract[j] +\n              \": \" +\n              features[featuresToExtract[j]].reduce(function (\n                previousValue,\n                currentValue\n              ) {\n                return previousValue + currentValue;\n              }) /\n                features[featuresToExtract[j]].length\n          );\n      }\n    }\n  );\n\n  wl.open(opt.argv[0]);\n})();\n"
  },
  {
    "path": "bin/wav-loader.js",
    "content": "var WavManager = function (open_callback, data_callback, end_callback) {\n  var source = new Buffer(1);\n  var fs = require(\"fs\");\n  var wav = require(\"wav\");\n  var _dcb = data_callback;\n  var _ecb = end_callback;\n  var _bitDepth = 16;\n  var _numBytesPerSample = 2;\n  var _endian = \"LE\";\n  var _signed = false;\n  var _format = \"unknown\";\n  var _channels = 1;\n  var read_fun = \"readUIntBE\";\n\n  function int_res(signed, depth) {\n    //if the fmt is signed int, the max absolute value is half the actual number of possible values\n    return signed ? Math.pow(2, depth) / 2 : Math.pow(2, depth);\n  }\n\n  this.format = function () {\n    return _format;\n  };\n\n  this.open = function (path) {\n    var file = fs.createReadStream(path);\n\n    var source = new Buffer(1); //empty the current source if needed\n\n    var reader = new wav.Reader();\n\n    reader.on(\"format\", function (format) {\n      //read wav headers\n      open_callback({ sampleRate: format.sampleRate });\n      _bitDepth = format.bitDepth;\n      _numBytesPerSample = _bitDepth / 8;\n      _endian = format.endianness;\n      _signed = format.signed;\n      _channels = format.channels;\n      _format = format;\n      read_fun = (_signed ? \"readInt\" : \"readUInt\") + _endian;\n    });\n\n    reader.on(\"data\", function (_d) {\n      source = Buffer.concat([source, _d], source.length + _d.length);\n\n      var output = new Float32Array(_d.length / _numBytesPerSample);\n\n      var source_pos = 0;\n      var out_pos = 0;\n      for (\n        ;\n        source_pos < _d.length;\n        source_pos += _numBytesPerSample, out_pos++\n      ) {\n        output[out_pos] =\n          _d[read_fun](source_pos, _numBytesPerSample) /\n          int_res(_signed, _bitDepth);\n      }\n\n      if (_dcb) _dcb(output);\n    });\n\n    reader.on(\"end\", function () {\n      var output = new Float32Array(source.length / _numBytesPerSample);\n\n      var source_pos = 0;\n      var out_pos = 0;\n      //here we discard the last byte because we don't really need this anyway and it's quicker\n      for (\n        ;\n        source_pos < source.length - _numBytesPerSample;\n        source_pos += _numBytesPerSample, out_pos++\n      ) {\n        output[out_pos] =\n          source[read_fun](source_pos, _numBytesPerSample) /\n          int_res(_signed, _bitDepth);\n      }\n\n      if (_ecb) _ecb(output);\n    });\n\n    file.pipe(reader);\n  };\n};\n\nmodule.exports = WavManager;\n"
  },
  {
    "path": "docs/404.html",
    "content": "---\nlayout: default\n---\n\n<style type=\"text/css\" media=\"screen\">\n  .container {\n    margin: 10px auto;\n    max-width: 600px;\n    text-align: center;\n  }\n  h1 {\n    margin: 30px 0;\n    font-size: 4em;\n    line-height: 1;\n    letter-spacing: -1px;\n  }\n</style>\n\n<div class=\"container\">\n  <h1>404</h1>\n\n  <p><strong>Page not found :(</strong></p>\n  <p>The requested page could not be found.</p>\n</div>\n"
  },
  {
    "path": "docs/CNAME",
    "content": "meyda.js.org"
  },
  {
    "path": "docs/Gemfile",
    "content": "source \"https://rubygems.org\"\n\n# Hello! This is where you manage which Jekyll version is used to run.\n# When you want to use a different version, change it below, save the\n# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:\n#\n#     bundle exec jekyll serve\n#\n# This will help ensure the proper Jekyll version is running.\n# Happy Jekylling!\ngem \"jekyll\", \"~> 4.3.2\"\n\n# This is the default theme for new Jekyll sites. You may change this to anything you like.\ngem \"minima\", \"~> 2.5.1\"\n\n# If you want to use GitHub Pages, remove the \"gem \"jekyll\"\" above and\n# uncomment the line below. To upgrade, run `bundle update github-pages`.\n# gem \"github-pages\", group: :jekyll_plugins\n\n# If you have any plugins, put them here!\ngroup :jekyll_plugins do\n  gem \"jekyll-feed\", \"~> 0.17.0\"\nend\n\n# Windows does not include zoneinfo files, so bundle the tzinfo-data gem\ngem \"tzinfo-data\", platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n\n# Performance-booster for watching directories on Windows\ngem \"wdm\", \"~> 0.1.0\" if Gem.win_platform?\n\ngem \"webrick\"\n"
  },
  {
    "path": "docs/README.md",
    "content": "## Meyda reference docs\n\nAutomatically generated reference documentation for the Meyda library.\n\n## Usage\n\nTo build the reference docs from the annotations in the source code, run the following command in the root directoroy of the project.\n\n```\n$ npm run generatereferencedocs\n```\n\nTo build the Javascript demo of Meyda that runs in the docs folder, run\n\n```\n$ cd docs\n$ npm run build\n```\n\nTo serve the docs locally\n\n```\n$ cd docs\n$ bundle install\n$ bundle exec jekyll serve\n```\n\nMake sure you're in the docs directory, have ruby and bundle installed on your machine, use bundle to install the dependencies (jekyll), and then use bundle to run jekyll's server.\n"
  },
  {
    "path": "docs/_config.yml",
    "content": "# Welcome to Jekyll!\n#\n# This config file is meant for settings that affect your whole blog, values\n# which you are expected to set up once and rarely edit after that. If you find\n# yourself editing this file very often, consider using Jekyll's data files\n# feature for the data you need to update frequently.\n#\n# For technical reasons, this file is *NOT* reloaded automatically when you use\n# 'bundle exec jekyll serve'. If you change this file, please restart the server process.\n\n# Site settings\n# These are used to personalize your new site. If you look in the HTML files,\n# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.\n# You can create any custom variable you would like, and they will be accessible\n# in the templates via {{ site.myvariable }}.\ntitle: \"Meyda: Javascript Audio Feature Extraction\"\ndescription: >- # this means to ignore newlines until \"baseurl:\"\n  Meyda is a Javascript audio feature extraction library. Meyda supports both offline\n  feature extraction as well as real-time feature extraction using the Web Audio API.\nbaseurl: \"\" # the subpath of your site, e.g. /blog\nurl: \"\" # the base hostname & protocol for your site, e.g. http://example.com\n\n# Build settings\nmarkdown: kramdown\ntheme: minima\nplugins:\n  - jekyll-feed\n\n# Exclude from processing.\n# The following items will not be processed, by default. Create a custom list\n# to override the default setting.\nexclude:\n  - Gemfile\n  - Gemfile.lock\n  - node_modules\n  - README.md\n  - src\n#   - vendor/bundle/\n#   - vendor/cache/\n#   - vendor/gems/\n#   - vendor/ruby/\n"
  },
  {
    "path": "docs/_includes/contributors.html",
    "content": "<div class=\"row text-center\">\n  <div class=\"col-6 col-sm-3\">\n    <dl>\n      <dt>Hugh Rawlinson</dt>\n      <dd><a href=\"http://twitter.com/hughrawlinson\">@hughrawlinson</a></dd>\n    </dl>\n  </div>\n  <div class=\"col-6 col-sm-3\">\n    <dl>\n      <dt>Nevo Segal</dt>\n      <dd><a href=\"http://twitter.com/nevosegal\">@nevosegal</a></dd>\n    </dl>\n  </div>\n  <div class=\"col-6 col-sm-3\">\n    <dl>\n      <dt>Jakub Fiala</dt>\n      <dd><a href=\"http://twitter.com/fiala__\">@fiala__</a></dd>\n    </dl>\n  </div>\n  <div class=\"col-6 col-sm-3\">\n    <dl>\n      <dt>Sam Wray</dt>\n      <dd><a href=\"https://twitter.com/_2xAA\">@_2xAA</a></dd>\n    </dl>\n  </div>\n</div>\n"
  },
  {
    "path": "docs/_includes/footer.html",
    "content": "<div class=\"row\">\n  <div class=\"col\">\n    <footer class=\"blog-footer\">\n      <hr>\n      <p>Showcase site built by the Meyda core team. You can <a href=\"https://github.com/hughrawlinson/meyda/wiki/contributing\">contribute</a> too you know!</p>\n      <p><a href=\"#\">Back to top</a></p>\n    </footer>\n  </div>\n</div>\n"
  },
  {
    "path": "docs/_includes/head.html",
    "content": "<head>\n  <title>Meyda</title>\n  <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css\" integrity=\"sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ\" crossorigin=\"anonymous\">\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1, user-scalable=no\">\n  <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n  {%- seo -%}\n  <link rel=\"stylesheet\" href=\"{{ \"/assets/main.css\" | relative_url }}\">\n  {%- feed_meta -%}\n  {%- if jekyll.environment == 'production' and site.google_analytics -%}\n    {%- include google-analytics.html -%}\n  {%- endif -%}\n</head>\n"
  },
  {
    "path": "docs/_includes/header.html",
    "content": "<div class=\"row\">\n  <div class=\"col\">\n    <a href=\"/\" id=\"title-link\"><h1 class=\"display-1\">Meyda</h1></a>\n    <p class=\"lead\">Audio feature extraction for JavaScript.</p>\n    <hr>\n  </div>\n  {%- include nav.html -%}\n</div>\n"
  },
  {
    "path": "docs/_includes/nav.html",
    "content": "<nav>\n  <a href=\"/getting-started\">Getting Started</a> |\n  <a href=\"/reference\">Reference</a> |\n  <a href=\"/audio-features\">Audio Features</a> |\n  <a href=\"/showcase\">Showcase</a> |\n  <a href=\"/guides/contributing\">Contributing</a> |\n  <a href=\"https://github.com/hughrawlinson/meyda/issues\">Issue Tracker</a>\n</nav>\n"
  },
  {
    "path": "docs/_includes/showcase.html",
    "content": "<div class=\"row\">\n  <div id=\"showcase\" class=\"col\">\n    <div id=\"audioControl\">\n      <p>Allow microphone access or play this audio file to see a demo.</p>\n      <audio id=\"elvisSong\" controls src=\"/assets/ripitup.mp3\"></audio>\n    </div>\n    <canvas></canvas>\n    <div id=\"legend\">\n      <div class=\"key-item\">\n        <div class=\"key-color pink\"></div><div class=\"key-text\">Root Mean Squared (RMS)</div>\n      </div>\n      <div class=\"key-item\">\n        <div class=\"key-color yellow\"></div><div class=\"key-text\">Spectral Centroid</div>\n      </div>\n      <div class=\"key-item\">\n        <div class=\"key-color blue\"></div><div class=\"key-text\">Spectral Rolloff</div>\n      </div>\n    </div>\n    <div id=\"chroma\"></div>\n    <div id=\"mfcc\"></div>\n  </div>\n  <hr>\n</div>\n<script src=\"/assets/main.js\"></script>\n"
  },
  {
    "path": "docs/_layouts/default.html",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ page.lang | default: site.lang | default: \"en\" }}\">\n  {%- include head.html -%}\n  <body>\n    <div class=\"container\">\n      {%- include header.html -%}\n      {{ content }}\n      {%- include footer.html -%}\n    </div>\n    <a href=\"https://github.com/hughrawlinson/meyda\"><img style=\"position: absolute; top: 0; right: 0; border: 0;\" src=\"https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67\" alt=\"Fork me on GitHub\" data-canonical-src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png\"></a>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/_layouts/homepage.html",
    "content": "---\nlayout: default\n---\n{%- include showcase.html -%}\n<div class=\"row\">\n  <div class=\"col\">\n    {{ content }}\n  </div>\n</div>\n\n\n{%- include contributors.html -%}\n"
  },
  {
    "path": "docs/assets/main.css",
    "content": "body {\n  padding: 5rem 0;\n}\n\ncanvas {\n  width: 100%;\n  height: auto;\n}\n\naudio {\n  width:100%;\n}\n\n.key-item {\n  font-size: small;\n  text-align: center;\n  display: inline-block;\n  margin: 0 15px;\n  vertical-align: middle;\n}\n\n.key-color {\n  border: 1px solid;\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 0 5px 0 0;\n  vertical-align: middle;\n}\n\n.key-text {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.key-color.pink {\n  background-color: #ff00ff;\n}\n\n.key-color.yellow {\n  background-color: #ffff00;\n}\n\n.key-color.blue {\n  background-color: #0000ff;\n}\n\ndiv#legend {\n  text-align: center;\n  vertical-align: middle;\n}\n\n#showcase #chroma::before {\n  content: 'Chroma bands:';\n  margin-right: 10px;\n  display: inline-block;\n  text-align: center;\n}\n\n#showcase #chroma {\n  margin-top: 20px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n#showcase .chroma-band {\n  flex: 0 1 28px;\n  height: 28px;\n  display: inline-block;\n  text-align: center;\n  padding-top: 7px;\n  font-size: 10px;\n  color: #ffffff;\n}\n\n#showcase #mfcc::before {\n  content: 'MFCC bands:';\n  margin-right: 10px;\n  display: inline-block;\n  text-align: center;\n}\n\n#showcase #mfcc {\n  margin-top: 20px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n#showcase .mfcc-band {\n  flex: 0 1 28px;\n  height: 28px;\n  display: inline-block;\n  text-align: center;\n  padding-top: 7px;\n  font-size: 10px;\n  color: #ffffff;\n}\n\n#title-link {\n  color:inherit;\n}\n\n#title-link:hover {\n  text-decoration: none;\n}\n\nimg {\n  max-width: 100%;\n}\n"
  },
  {
    "path": "docs/assets/main.js",
    "content": "!function(){\"use strict\";\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self&&self;var t,e={exports:{}};e.exports=function(){var t=Object.freeze({__proto__:null,blackman:function(t){let e=new Float32Array(t),n=2*Math.PI/(t-1),i=2*n;for(let r=0;r<t/2;r++)e[r]=.42-.5*Math.cos(r*n)+.08*Math.cos(r*i);for(let n=Math.ceil(t/2);n>0;n--)e[t-n]=e[n-1];return e},sine:function(t){let e=Math.PI/(t-1),n=new Float32Array(t);for(let i=0;i<t;i++)n[i]=Math.sin(e*i);return n},hanning:function(t){let e=new Float32Array(t);for(let n=0;n<t;n++)e[n]=.5-.5*Math.cos(2*Math.PI*n/(t-1));return e},hamming:function(t){let e=new Float32Array(t);for(let n=0;n<t;n++)e[n]=.54-.46*Math.cos(2*Math.PI*(n/t-1));return e}});let e={};function n(t){for(;t%2==0&&t>1;)t/=2;return 1===t}function i(n,i){if(\"rect\"!==i){if(\"\"!==i&&i||(i=\"hanning\"),e[i]||(e[i]={}),!e[i][n.length])try{e[i][n.length]=t[i](n.length)}catch(t){throw new Error(\"Invalid windowing function\")}n=function(t,e){let n=[];for(let i=0;i<Math.min(t.length,e.length);i++)n[i]=t[i]*e[i];return n}(n,e[i][n.length])}return n}function r(t,e,n){let i=new Float32Array(t);for(var r=0;r<i.length;r++)i[r]=r*e/n,i[r]=13*Math.atan(i[r]/1315.8)+3.5*Math.atan(Math.pow(i[r]/7518,2));return i}function s(t){return Float32Array.from(t)}function a(t){return 1125*Math.log(1+t/700)}function o(t,e,n){let i=new Float32Array(t+2),r=new Float32Array(t+2),s=e/2,o=a(0),l=(a(s)-o)/(t+1),c=Array(t+2);for(let t=0;t<i.length;t++)i[t]=t*l,r[t]=(h=i[t],700*(Math.exp(h/1125)-1)),c[t]=Math.floor((n+1)*r[t]/e);var h,u=Array(t);for(let t=0;t<u.length;t++){u[t]=Array.apply(null,new Array(n/2+1)).map(Number.prototype.valueOf,0);for(let e=c[t];e<c[t+1];e++)u[t][e]=(e-c[t])/(c[t+1]-c[t]);for(let e=c[t+1];e<c[t+2];e++)u[t][e]=(c[t+2]-e)/(c[t+2]-c[t+1])}return u}function l(t,e,n,i=5,r=2,s=!0,a=440){var o=Math.floor(n/2)+1,l=new Array(n).fill(0).map(((i,r)=>t*function(t,e){return Math.log2(16*t/e)}(e*r/n,a)));l[0]=l[1]-1.5*t;var c,h,u,d=l.slice(1).map(((t,e)=>Math.max(t-l[e])),1).concat([1]),p=Math.round(t/2),m=new Array(t).fill(0).map(((e,n)=>l.map((e=>(10*t+p+e-n)%t-p)))),f=m.map(((t,e)=>t.map(((t,n)=>Math.exp(-.5*Math.pow(2*m[e][n]/d[n],2))))));if(h=(c=f)[0].map((()=>0)),u=c.reduce(((t,e)=>(e.forEach(((e,n)=>{t[n]+=Math.pow(e,2)})),t)),h).map(Math.sqrt),f=c.map(((t,e)=>t.map(((t,e)=>t/(u[e]||1))))),r){var g=l.map((e=>Math.exp(-.5*Math.pow((e/t-i)/r,2))));f=f.map((t=>t.map(((t,e)=>t*g[e]))))}return s&&(f=[...f.slice(3),...f.slice(0,3)]),f.map((t=>t.slice(0,o)))}function c(t,e){for(var n=0,i=0,r=0;r<e.length;r++)n+=Math.pow(r,t)*Math.abs(e[r]),i+=e[r];return n/i}function h(t){if(\"object\"!=typeof t.ampSpectrum||\"object\"!=typeof t.barkScale)throw new TypeError;var e=24,n=new Float32Array(e),i=0,r=t.ampSpectrum,s=new Int32Array(25);s[0]=0;var a=t.barkScale[r.length-1]/e,o=1;for(let n=0;n<r.length;n++)for(;t.barkScale[n]>a;)s[o++]=n,a=o*t.barkScale[r.length-1]/e;s[24]=r.length-1;for(let t=0;t<e;t++){let e=0;for(let n=s[t];n<s[t+1];n++)e+=r[n];n[t]=Math.pow(e,.23)}for(let t=0;t<n.length;t++)i+=n[t];return{specific:n,total:i}}function u(){if(\"object\"!=typeof arguments[0].ampSpectrum)throw new TypeError;for(var t=new Float32Array(arguments[0].ampSpectrum.length),e=0;e<t.length;e++)t[e]=Math.pow(arguments[0].ampSpectrum[e],2);return t}var d=null,p=function(t,e){var n=t.length;return e=e||2,d&&d[n]||function(t){(d=d||{})[t]=new Array(t*t);for(var e=Math.PI/t,n=0;n<t;n++)for(var i=0;i<t;i++)d[t][i+n*t]=Math.cos(e*(i+.5)*n)}(n),t.map((function(){return 0})).map((function(i,r){return e*t.reduce((function(t,e,i,s){return t+e*d[n][i+r*n]}),0)}))},m=Object.freeze({__proto__:null,buffer:function(t){return t.signal},rms:function(t){if(\"object\"!=typeof t.signal)throw new TypeError;for(var e=0,n=0;n<t.signal.length;n++)e+=Math.pow(t.signal[n],2);return e/=t.signal.length,Math.sqrt(e)},energy:function(){if(\"object\"!=typeof arguments[0].signal)throw new TypeError;for(var t=0,e=0;e<arguments[0].signal.length;e++)t+=Math.pow(Math.abs(arguments[0].signal[e]),2);return t},complexSpectrum:function(t){return t.complexSpectrum},spectralSlope:function(t){if(\"object\"!=typeof t.ampSpectrum)throw new TypeError;let e=0,n=0,i=new Float32Array(t.ampSpectrum.length),r=0,s=0;for(var a=0;a<t.ampSpectrum.length;a++){e+=t.ampSpectrum[a];let o=a*t.sampleRate/t.bufferSize;i[a]=o,r+=o*o,n+=o,s+=o*t.ampSpectrum[a]}return(t.ampSpectrum.length*s-n*e)/(e*(r-Math.pow(n,2)))},spectralCentroid:function(){if(\"object\"!=typeof arguments[0].ampSpectrum)throw new TypeError;return c(1,arguments[0].ampSpectrum)},spectralRolloff:function(){if(\"object\"!=typeof arguments[0].ampSpectrum)throw new TypeError;for(var t=arguments[0].ampSpectrum,e=arguments[0].sampleRate/(2*(t.length-1)),n=0,i=0;i<t.length;i++)n+=t[i];for(var r=.99*n,s=t.length-1;n>r&&s>=0;)n-=t[s],--s;return(s+1)*e},spectralFlatness:function(){if(\"object\"!=typeof arguments[0].ampSpectrum)throw new TypeError;for(var t=0,e=0,n=0;n<arguments[0].ampSpectrum.length;n++)t+=Math.log(arguments[0].ampSpectrum[n]),e+=arguments[0].ampSpectrum[n];return Math.exp(t/arguments[0].ampSpectrum.length)*arguments[0].ampSpectrum.length/e},spectralSpread:function(t){if(\"object\"!=typeof t.ampSpectrum)throw new TypeError;return Math.sqrt(c(2,t.ampSpectrum)-Math.pow(c(1,t.ampSpectrum),2))},spectralSkewness:function(t){if(\"object\"!=typeof t.ampSpectrum)throw new TypeError;var e=c(1,t.ampSpectrum),n=c(2,t.ampSpectrum),i=c(3,t.ampSpectrum);return(2*Math.pow(e,3)-3*e*n+i)/Math.pow(Math.sqrt(n-Math.pow(e,2)),3)},spectralKurtosis:function(){if(\"object\"!=typeof arguments[0].ampSpectrum)throw new TypeError;var t=arguments[0].ampSpectrum,e=c(1,t),n=c(2,t),i=c(3,t),r=c(4,t);return(-3*Math.pow(e,4)+6*e*n-4*e*i+r)/Math.pow(Math.sqrt(n-Math.pow(e,2)),4)},amplitudeSpectrum:function(t){return t.ampSpectrum},zcr:function(){if(\"object\"!=typeof arguments[0].signal)throw new TypeError;for(var t=0,e=1;e<arguments[0].signal.length;e++)(arguments[0].signal[e-1]>=0&&arguments[0].signal[e]<0||arguments[0].signal[e-1]<0&&arguments[0].signal[e]>=0)&&t++;return t},loudness:h,perceptualSpread:function(){if(\"object\"!=typeof arguments[0].signal)throw new TypeError;for(var t=h(arguments[0]),e=0,n=0;n<t.specific.length;n++)t.specific[n]>e&&(e=t.specific[n]);return Math.pow((t.total-e)/t.total,2)},perceptualSharpness:function(){if(\"object\"!=typeof arguments[0].signal)throw new TypeError;for(var t=h(arguments[0]),e=t.specific,n=0,i=0;i<e.length;i++)n+=i<15?(i+1)*e[i+1]:.066*Math.exp(.171*(i+1));return n*(.11/t.total)},powerSpectrum:u,mfcc:function(t){if(\"object\"!=typeof t.ampSpectrum)throw new TypeError(\"Valid ampSpectrum is required to generate MFCC\");if(\"object\"!=typeof t.melFilterBank)throw new TypeError(\"Valid melFilterBank is required to generate MFCC\");let e=Math.min(40,Math.max(1,t.numberOfMFCCCoefficients||13)),n=u(t),i=t.melFilterBank.length,r=Array(i);if(i<e)throw new Error(\"Insufficient filter bank for requested number of coefficients\");let s=new Float32Array(i);for(let e=0;e<s.length;e++){r[e]=new Float32Array(t.bufferSize/2),s[e]=0;for(let i=0;i<t.bufferSize/2;i++)r[e][i]=t.melFilterBank[e][i]*n[i],s[e]+=r[e][i];s[e]=Math.log(s[e]+1)}let a=Array.prototype.slice.call(s);return p(a).slice(0,e)},chroma:function(t){if(\"object\"!=typeof t.ampSpectrum)throw new TypeError(\"Valid ampSpectrum is required to generate chroma\");if(\"object\"!=typeof t.chromaFilterBank)throw new TypeError(\"Valid chromaFilterBank is required to generate chroma\");var e=t.chromaFilterBank.map(((e,n)=>t.ampSpectrum.reduce(((t,n,i)=>t+n*e[i]),0))),n=Math.max(...e);return n?e.map((t=>t/n)):e},spectralFlux:function(t){if(\"object\"!=typeof t.signal||\"object\"!=typeof t.previousSignal)throw new TypeError;let e=0;for(let n=-t.bufferSize/2;n<signal.length/2-1;n++)x=Math.abs(t.signal[n])-Math.abs(t.previousSignal[n]),e+=(x+Math.abs(x))/2;return e}});function f(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}var g={},v={},y={bitReverseArray:function(t){if(void 0===g[t]){for(var e=(t-1).toString(2).length,n=\"0\".repeat(e),i={},r=0;r<t;r++){var s=r.toString(2);s=n.substr(s.length)+s,s=[].concat(f(s)).reverse().join(\"\"),i[r]=parseInt(s,2)}g[t]=i}return g[t]},multiply:function(t,e){return{real:t.real*e.real-t.imag*e.imag,imag:t.real*e.imag+t.imag*e.real}},add:function(t,e){return{real:t.real+e.real,imag:t.imag+e.imag}},subtract:function(t,e){return{real:t.real-e.real,imag:t.imag-e.imag}},euler:function(t,e){var n=-2*Math.PI*t/e;return{real:Math.cos(n),imag:Math.sin(n)}},conj:function(t){return t.imag*=-1,t},constructComplexArray:function(t){var e={};e.real=void 0===t.real?t.slice():t.real.slice();var n=e.real.length;return void 0===v[n]&&(v[n]=Array.apply(null,Array(n)).map(Number.prototype.valueOf,0)),e.imag=v[n].slice(),e}},_=function(t){var e={};void 0===t.real||void 0===t.imag?e=y.constructComplexArray(t):(e.real=t.real.slice(),e.imag=t.imag.slice());var n=e.real.length,i=Math.log2(n);if(Math.round(i)!=i)throw new Error(\"Input size must be a power of 2.\");if(e.real.length!=e.imag.length)throw new Error(\"Real and imaginary components must have the same length.\");for(var r=y.bitReverseArray(n),s={real:[],imag:[]},a=0;a<n;a++)s.real[r[a]]=e.real[a],s.imag[r[a]]=e.imag[a];for(var o=0;o<n;o++)e.real[o]=s.real[o],e.imag[o]=s.imag[o];for(var l=1;l<=i;l++)for(var c=Math.pow(2,l),h=0;h<c/2;h++)for(var u=y.euler(h,c),d=0;d<n/c;d++){var p=c*d+h,m=c*d+h+c/2,f={real:e.real[p],imag:e.imag[p]},g={real:e.real[m],imag:e.imag[m]},v=y.multiply(u,g),x=y.subtract(f,v);e.real[m]=x.real,e.imag[m]=x.imag;var _=y.add(v,f);e.real[p]=_.real,e.imag[p]=_.imag}return e};class w{constructor(t,e){if(this._m=e,!t.audioContext)throw this._m.errors.noAC;if(t.bufferSize&&!n(t.bufferSize))throw this._m._errors.notPow2;if(!t.source)throw this._m._errors.noSource;this._m.audioContext=t.audioContext,this._m.bufferSize=t.bufferSize||this._m.bufferSize||256,this._m.hopSize=t.hopSize||this._m.hopSize||this._m.bufferSize,this._m.sampleRate=t.sampleRate||this._m.audioContext.sampleRate||44100,this._m.callback=t.callback,this._m.windowingFunction=t.windowingFunction||\"hanning\",this._m.featureExtractors=m,this._m.EXTRACTION_STARTED=t.startImmediately||!1,this._m.channel=\"number\"==typeof t.channel?t.channel:0,this._m.inputs=t.inputs||1,this._m.outputs=t.outputs||1,this._m.numberOfMFCCCoefficients=t.numberOfMFCCCoefficients||this._m.numberOfMFCCCoefficients||13,this._m.spn=this._m.audioContext.createScriptProcessor(this._m.bufferSize,this._m.inputs,this._m.outputs),this._m.spn.connect(this._m.audioContext.destination),this._m._featuresToExtract=t.featureExtractors||[],this._m.barkScale=r(this._m.bufferSize,this._m.sampleRate,this._m.bufferSize),this._m.melFilterBank=o(Math.max(this._m.melBands,this._m.numberOfMFCCCoefficients),this._m.sampleRate,this._m.bufferSize),this._m.inputData=null,this._m.previousInputData=null,this._m.frame=null,this._m.previousFrame=null,this.setSource(t.source),this._m.spn.onaudioprocess=t=>{if(null!==this._m.inputData&&(this._m.previousInputData=this._m.inputData),this._m.inputData=t.inputBuffer.getChannelData(this._m.channel),this._m.previousInputData)(e=new Float32Array(this._m.previousInputData.length+this._m.inputData.length-this._m.hopSize)).set(this._m.previousInputData.slice(this._m.hopSize)),e.set(this._m.inputData,this._m.previousInputData.length-this._m.hopSize);else var e=this._m.inputData;(function(t,e,n){if(t.length<e)throw new Error(\"Buffer is too short for frame length\");if(n<1)throw new Error(\"Hop length cannot be less that 1\");if(e<1)throw new Error(\"Frame length cannot be less that 1\");const i=1+Math.floor((t.length-e)/n);return new Array(i).fill(0).map(((i,r)=>t.slice(r*n,r*n+e)))})(e,this._m.bufferSize,this._m.hopSize).forEach((t=>{this._m.frame=t;var e=this._m.extract(this._m._featuresToExtract,this._m.frame,this._m.previousFrame);\"function\"==typeof this._m.callback&&this._m.EXTRACTION_STARTED&&this._m.callback(e),this._m.previousFrame=this._m.frame}))}}start(t){this._m._featuresToExtract=t||this._m._featuresToExtract,this._m.EXTRACTION_STARTED=!0}stop(){this._m.EXTRACTION_STARTED=!1}setSource(t){this._m.source&&this._m.source.disconnect(this._m.spn),this._m.source=t,this._m.source.connect(this._m.spn)}setChannel(t){t<=this._m.inputs?this._m.channel=t:console.error(`Channel ${t} does not exist. Make sure you've provided a value for 'inputs' that is greater than ${t} when instantiating the MeydaAnalyzer`)}get(t){return this._m.inputData?this._m.extract(t||this._m._featuresToExtract,this._m.inputData,this._m.previousInputData):null}}var M={audioContext:null,spn:null,bufferSize:512,sampleRate:44100,melBands:26,chromaBands:12,callback:null,windowingFunction:\"hanning\",featureExtractors:m,EXTRACTION_STARTED:!1,numberOfMFCCCoefficients:13,_featuresToExtract:[],windowing:i,_errors:{notPow2:new Error(\"Meyda: Buffer size must be a power of 2, e.g. 64 or 512\"),featureUndef:new Error(\"Meyda: No features defined.\"),invalidFeatureFmt:new Error(\"Meyda: Invalid feature format\"),invalidInput:new Error(\"Meyda: Invalid input.\"),noAC:new Error(\"Meyda: No AudioContext specified.\"),noSource:new Error(\"Meyda: No source node specified.\")},createMeydaAnalyzer:function(t){return new w(t,Object.assign({},M))},listAvailableFeatureExtractors:function(){return Object.keys(this.featureExtractors)},extract:function(t,e,i){if(!e)throw this._errors.invalidInput;if(\"object\"!=typeof e)throw this._errors.invalidInput;if(!t)throw this._errors.featureUndef;if(!n(e.length))throw this._errors.notPow2;void 0!==this.barkScale&&this.barkScale.length==this.bufferSize||(this.barkScale=r(this.bufferSize,this.sampleRate,this.bufferSize)),void 0!==this.melFilterBank&&this.barkScale.length==this.bufferSize&&this.melFilterBank.length==this.melBands||(this.melFilterBank=o(Math.max(this.melBands,this.numberOfMFCCCoefficients),this.sampleRate,this.bufferSize)),void 0!==this.chromaFilterBank&&this.chromaFilterBank.length==this.chromaBands||(this.chromaFilterBank=l(this.chromaBands,this.sampleRate,this.bufferSize)),void 0===e.buffer?this.signal=s(e):this.signal=e;let a=b(e,this.windowingFunction,this.bufferSize);if(this.signal=a.windowedSignal,this.complexSpectrum=a.complexSpectrum,this.ampSpectrum=a.ampSpectrum,i){let t=b(i,this.windowingFunction,this.bufferSize);this.previousSignal=t.windowedSignal,this.previousComplexSpectrum=t.complexSpectrum,this.previousAmpSpectrum=t.ampSpectrum}const c=t=>this.featureExtractors[t]({ampSpectrum:this.ampSpectrum,chromaFilterBank:this.chromaFilterBank,complexSpectrum:this.complexSpectrum,signal:this.signal,bufferSize:this.bufferSize,sampleRate:this.sampleRate,barkScale:this.barkScale,melFilterBank:this.melFilterBank,previousSignal:this.previousSignal,previousAmpSpectrum:this.previousAmpSpectrum,previousComplexSpectrum:this.previousComplexSpectrum,numberOfMFCCCoefficients:this.numberOfMFCCCoefficients});if(\"object\"==typeof t)return t.reduce(((t,e)=>Object.assign({},t,{[e]:c(e)})),{});if(\"string\"==typeof t)return c(t);throw this._errors.invalidFeatureFmt}},b=function(t,e,n){var r={};void 0===t.buffer?r.signal=s(t):r.signal=t,r.windowedSignal=i(r.signal,e),r.complexSpectrum=_(r.windowedSignal),r.ampSpectrum=new Float32Array(n/2);for(var a=0;a<n/2;a++)r.ampSpectrum[a]=Math.sqrt(Math.pow(r.complexSpectrum.real[a],2)+Math.pow(r.complexSpectrum.imag[a],2));return r};return\"undefined\"!=typeof window&&(window.Meyda=M),M}();var n=function(n){window.hasOwnProperty(\"webkitAudioContext\")&&!window.hasOwnProperty(\"AudioContext\")&&(window.AudioContext=webkitAudioContext),navigator.hasOwnProperty(\"webkitGetUserMedia\")&&!navigator.hasOwnProperty(\"getUserMedia\")&&(navigator.getUserMedia=webkitGetUserMedia,AudioContext.prototype.hasOwnProperty(\"createScriptProcessor\")||(AudioContext.prototype.createScriptProcessor=AudioContext.prototype.createJavaScriptNode)),this.context=new AudioContext;var i=document.getElementById(\"elvisSong\"),r=this.context.createMediaElementSource(i);r.connect(this.context.destination),this.meyda=e.exports.createMeydaAnalyzer({audioContext:this.context,source:r,bufferSize:n,windowingFunction:\"blackman\"}),t=this,this.initializeMicrophoneSampling()};n.prototype.initializeMicrophoneSampling=function(){var e=function(){if(\"suspended\"===t.context.state){var e=function(){t.context.resume(),setTimeout((function(){\"running\"===t.context.state&&document.body.removeEventListener(\"touchend\",e,!1)}),0)};document.body.addEventListener(\"touchend\",e,!1)}};try{navigator.getUserMedia=navigator.webkitGetUserMedia||navigator.getUserMedia||navigator.mediaDevices.getUserMedia;var n=function(e){document.getElementById(\"audioControl\").style.display=\"none\",console.log(\"User allowed microphone access.\"),console.log(\"Initializing AudioNode from MediaStream\");var n=t.context.createMediaStreamSource(e);console.log(\"Setting Meyda Source to Microphone\"),t.meyda.setSource(n),console.groupEnd()};console.log(\"Asking for permission...\"),navigator.mediaDevices.getUserMedia({audio:!0}).then(n).catch((function(t){console.log(t),navigator.getUserMedia({audio:!0},n,(function(t){e()}))}))}catch(t){e()}},n.prototype.get=function(e){return t.context.resume(),t.meyda.get(e)};\n/**\n\t * @license\n\t * Copyright 2010-2021 Three.js Authors\n\t * SPDX-License-Identifier: MIT\n\t */\nconst i=100,r=1e3,s=1001,a=1002,o=1003,l=1006,c=1008,h=1009,u=1012,d=1014,p=1015,m=1016,f=1020,g=1022,v=1023,y=1026,_=1027,w=2300,M=2301,b=2302,S=2400,T=2401,E=2402,A=2500,L=3e3,C=7680,R=35044,P=35048,D=\"300 es\";class I{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e<i;e++)n[e].call(this,t);t.target=null}}}const N=[];for(let t=0;t<256;t++)N[t]=(t<16?\"0\":\"\")+t.toString(16);const z=Math.PI/180,F=180/Math.PI;function O(){const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(N[255&t]+N[t>>8&255]+N[t>>16&255]+N[t>>24&255]+\"-\"+N[255&e]+N[e>>8&255]+\"-\"+N[e>>16&15|64]+N[e>>24&255]+\"-\"+N[63&n|128]+N[n>>8&255]+\"-\"+N[n>>16&255]+N[n>>24&255]+N[255&i]+N[i>>8&255]+N[i>>16&255]+N[i>>24&255]).toUpperCase()}function B(t,e,n){return Math.max(e,Math.min(n,t))}function U(t,e,n){return(1-n)*t+n*e}function H(t){return 0==(t&t-1)&&0!==t}function G(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}class k{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}k.prototype.isVector2=!0;class V{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],m=i[0],f=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],w=i[5],M=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*w,r[6]=s*g+a*x+o*M,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*w,r[7]=l*g+c*x+h*M,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*w,r[8]=u*g+d*x+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(a*n-i*s)*m,t[3]=u*m,t[4]=(c*e-i*o)*m,t[5]=(i*r-a*e)*m,t[6]=d*m,t[7]=(n*o-l*e)*m,t[8]=(s*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}let W;V.prototype.isMatrix3=!0;class j{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\"undefined\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===W&&(W=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\")),W.width=t.width,W.height=t.height;const n=W.getContext(\"2d\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=W}return e.width>2048||e.height>2048?(console.warn(\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",t),e.toDataURL(\"image/jpeg\",.6)):e.toDataURL(\"image/png\")}}let q=0;class X extends I{constructor(t=X.DEFAULT_IMAGE,e=X.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,a=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,\"id\",{value:q++}),this.uuid=O(),this.name=\"\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=l,this.format=a,this.internalFormat=null,this.type=o,this.offset=new k(0,0),this.repeat=new k(1,1),this.center=new k(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new V,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\"string\"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=O()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t<n;t++)i[t].isDataTexture?e.push(Y(i[t].image)):e.push(Y(i[t]))}else e=Y(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\"dispose\"})}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case r:t.x=t.x-Math.floor(t.x);break;case s:t.x=t.x<0?0:1;break;case a:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case r:t.y=t.y-Math.floor(t.y);break;case s:t.y=t.y<0?0:1;break;case a:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function Y(t){return\"undefined\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap?j.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\"THREE.Texture: Unable to serialize Texture.\"),{})}X.DEFAULT_IMAGE=void 0,X.DEFAULT_MAPPING=300,X.prototype.isTexture=!0;class Z{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)<s&&Math.abs(h-m)<s&&Math.abs(p-f)<s){if(Math.abs(c+u)<a&&Math.abs(h+m)<a&&Math.abs(p+f)<a&&Math.abs(l+d+g-3)<a)return this.set(1,0,0,0),this;e=Math.PI;const t=(l+1)/2,o=(d+1)/2,v=(g+1)/2,y=(c+u)/4,x=(h+m)/4,_=(p+f)/4;return t>o&&t>v?t<s?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=y/n,r=x/n):o>v?o<s?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=y/i,r=_/i):v<s?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(v),n=x/r,i=_/r),this.set(n,i,r,e),this}let v=Math.sqrt((f-p)*(f-p)+(h-m)*(h-m)+(u-c)*(u-c));return Math.abs(v)<.001&&(v=1),this.x=(f-p)/v,this.y=(h-m)/v,this.z=(u-c)/v,this.w=Math.acos((l+d+g-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}Z.prototype.isVector4=!0;class J extends I{constructor(t,e,n={}){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new Z(0,0,t,e),this.scissorTest=!1,this.viewport=new Z(0,0,t,e),this.texture=new X(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={width:t,height:e,depth:1},this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:l,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t&&this.height===e&&this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}J.prototype.isWebGLRenderTarget=!0;(class extends J{constructor(t,e,n){super(t,e);const i=this.texture;this.texture=[];for(let t=0;t<n;t++)this.texture[t]=i.clone()}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let i=0,r=this.texture.length;i<r;i++)this.texture[i].image.width=t,this.texture[i].image.height=e,this.texture[i].image.depth=n;this.dispose()}return this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e),this}copy(t){this.dispose(),this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this.texture.length=0;for(let e=0,n=t.texture.length;e<n;e++)this.texture[e]=t.texture[e].clone();return this}}).prototype.isWebGLMultipleRenderTargets=!0;class Q extends J{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}Q.prototype.isWebGLMultisampleRenderTarget=!0;class K{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,r,s,a){let o=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[s+0],d=r[s+1],p=r[s+2],m=r[s+3];if(0===a)return t[e+0]=o,t[e+1]=l,t[e+2]=c,void(t[e+3]=h);if(1===a)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=m);if(h!==m||o!==u||l!==d||c!==p){let t=1-a;const e=o*u+l*d+c*p+h*m,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case\"XYZ\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\"YXZ\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\"ZXY\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\"ZYX\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\"YZX\":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case\"XZY\":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn(\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \"+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<Number.EPSILON?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(B(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}K.prototype.isQuaternion=!0;class ${constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\"),this.applyQuaternion(et.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(et.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,h=o*i+r*n-s*e,u=-r*e-s*n-a*i;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return tt.copy(this).projectOnVector(t),this.sub(tt)}reflect(t){return this.sub(tt.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(B(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}$.prototype.isVector3=!0;const tt=new $,et=new K;class nt{constructor(t=new $(1/0,1/0,1/0),e=new $(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;o<l;o+=3){const l=t[o],c=t[o+1],h=t[o+2];l<e&&(e=l),c<n&&(n=c),h<i&&(i=h),l>r&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;o<l;o++){const l=t.getX(o),c=t.getY(o),h=t.getZ(o);l<e&&(e=l),c<n&&(n=c),h<i&&(i=h),l>r&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=rt.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),st.copy(e.boundingBox),st.applyMatrix4(t.matrixWorld),this.union(st));const n=t.children;for(let t=0,e=n.length;t<e;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,rt),rt.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(dt),pt.subVectors(this.max,dt),at.subVectors(t.a,dt),ot.subVectors(t.b,dt),lt.subVectors(t.c,dt),ct.subVectors(ot,at),ht.subVectors(lt,ot),ut.subVectors(at,lt);let e=[0,-ct.z,ct.y,0,-ht.z,ht.y,0,-ut.z,ut.y,ct.z,0,-ct.x,ht.z,0,-ht.x,ut.z,0,-ut.x,-ct.y,ct.x,0,-ht.y,ht.x,0,-ut.y,ut.x,0];return!!gt(e,at,ot,lt,pt)&&(e=[1,0,0,0,1,0,0,0,1],!!gt(e,at,ot,lt,pt)&&(mt.crossVectors(ct,ht),e=[mt.x,mt.y,mt.z],gt(e,at,ot,lt,pt)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return rt.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(rt).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(it[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),it[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),it[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),it[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),it[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),it[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),it[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),it[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(it)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}nt.prototype.isBox3=!0;const it=[new $,new $,new $,new $,new $,new $,new $,new $],rt=new $,st=new nt,at=new $,ot=new $,lt=new $,ct=new $,ht=new $,ut=new $,dt=new $,pt=new $,mt=new $,ft=new $;function gt(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){ft.fromArray(t,s);const a=r.x*Math.abs(ft.x)+r.y*Math.abs(ft.y)+r.z*Math.abs(ft.z),o=e.dot(ft),l=n.dot(ft),c=i.dot(ft);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const vt=new nt,yt=new $,xt=new $,_t=new $;class wt{constructor(t=new $,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):vt.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;e<r;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){_t.subVectors(t,this.center);const e=_t.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(_t.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return xt.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(yt.copy(t.center).add(xt)),this.expandByPoint(yt.copy(t.center).sub(xt)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Mt=new $,bt=new $,St=new $,Tt=new $,Et=new $,At=new $,Lt=new $;class Ct{constructor(t=new $,e=new $(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Mt)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Mt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Mt.copy(this.direction).multiplyScalar(e).add(this.origin),Mt.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){bt.copy(t).add(e).multiplyScalar(.5),St.copy(e).sub(t).normalize(),Tt.copy(this.origin).sub(bt);const r=.5*t.distanceTo(e),s=-this.direction.dot(St),a=Tt.dot(this.direction),o=-Tt.dot(St),l=Tt.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(St).multiplyScalar(u).add(bt),d}intersectSphere(t,e){Mt.subVectors(t.center,this.origin);const n=Mt.dot(this.direction),i=Mt.dot(Mt)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a<0&&o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s<i||i!=i)&&(i=s),h>=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||a>i?null:((a>n||n!=n)&&(n=a),(o<i||i!=i)&&(i=o),i<0?null:this.at(n>=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Mt)}intersectTriangle(t,e,n,i,r){Et.subVectors(e,t),At.subVectors(n,t),Lt.crossVectors(Et,At);let s,a=this.direction.dot(Lt);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}Tt.subVectors(this.origin,t);const o=s*this.direction.dot(At.crossVectors(Tt,At));if(o<0)return null;const l=s*this.direction.dot(Et.cross(Tt));if(l<0)return null;if(o+l>a)return null;const c=-s*Tt.dot(Lt);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Rt{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Rt).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Pt.setFromMatrixColumn(t,0).length(),r=1/Pt.setFromMatrixColumn(t,1).length(),s=1/Pt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error(\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if(\"XYZ\"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if(\"YXZ\"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if(\"ZXY\"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if(\"ZYX\"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if(\"YZX\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if(\"XZY\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(It,t,Nt)}lookAt(t,e,n){const i=this.elements;return Ot.subVectors(t,e),0===Ot.lengthSq()&&(Ot.z=1),Ot.normalize(),zt.crossVectors(n,Ot),0===zt.lengthSq()&&(1===Math.abs(n.z)?Ot.x+=1e-4:Ot.z+=1e-4,Ot.normalize(),zt.crossVectors(n,Ot)),zt.normalize(),Ft.crossVectors(Ot,zt),i[0]=zt.x,i[4]=Ft.x,i[8]=Ot.x,i[1]=zt.y,i[5]=Ft.y,i[9]=Ot.y,i[2]=zt.z,i[6]=Ft.z,i[10]=Ot.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],m=n[6],f=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],w=i[0],M=i[4],b=i[8],S=i[12],T=i[1],E=i[5],A=i[9],L=i[13],C=i[2],R=i[6],P=i[10],D=i[14],I=i[3],N=i[7],z=i[11],F=i[15];return r[0]=s*w+a*T+o*C+l*I,r[4]=s*M+a*E+o*R+l*N,r[8]=s*b+a*A+o*P+l*z,r[12]=s*S+a*L+o*D+l*F,r[1]=c*w+h*T+u*C+d*I,r[5]=c*M+h*E+u*R+d*N,r[9]=c*b+h*A+u*P+d*z,r[13]=c*S+h*L+u*D+d*F,r[2]=p*w+m*T+f*C+g*I,r[6]=p*M+m*E+f*R+g*N,r[10]=p*b+m*A+f*P+g*z,r[14]=p*S+m*L+f*D+g*F,r[3]=v*w+y*T+x*C+_*I,r[7]=v*M+y*E+x*R+_*N,r[11]=v*b+y*A+x*P+_*z,r[15]=v*S+y*L+x*D+_*F,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,y=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,x=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,_=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,w=e*v+n*y+i*x+r*_;if(0===w)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/w;return t[0]=v*M,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*M,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*M,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*M,t[4]=y*M,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*M,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*M,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*M,t[8]=x*M,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*M,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*M,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*M,t[12]=_*M,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*M,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*M,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*M,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,y=o*c,x=o*h,_=n.x,w=n.y,M=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*w,i[5]=(1-(u+g))*w,i[6]=(f+v)*w,i[7]=0,i[8]=(p+y)*M,i[9]=(f-v)*M,i[10]=(1-(u+m))*M,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Pt.set(i[0],i[1],i[2]).length();const s=Pt.set(i[4],i[5],i[6]).length(),a=Pt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Dt.copy(this);const o=1/r,l=1/s,c=1/a;return Dt.elements[0]*=o,Dt.elements[1]*=o,Dt.elements[2]*=o,Dt.elements[4]*=l,Dt.elements[5]*=l,Dt.elements[6]*=l,Dt.elements[8]*=c,Dt.elements[9]*=c,Dt.elements[10]*=c,e.setFromRotationMatrix(Dt),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn(\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),h=(e+t)*o,u=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}Rt.prototype.isMatrix4=!0;const Pt=new $,Dt=new Rt,It=new $(0,0,0),Nt=new $(1,1,1),zt=new $,Ft=new $,Ot=new $,Bt=new Rt,Ut=new K;class Ht{constructor(t=0,e=0,n=0,i=Ht.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case\"XYZ\":this._y=Math.asin(B(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case\"YXZ\":this._x=Math.asin(-B(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case\"ZXY\":this._x=Math.asin(B(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case\"ZYX\":this._y=Math.asin(-B(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case\"YZX\":this._z=Math.asin(B(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case\"XZY\":this._z=Math.asin(-B(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn(\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \"+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Bt.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Bt,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Ut.setFromEuler(this),this.setFromQuaternion(Ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new $(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Ht.prototype.isEuler=!0,Ht.DefaultOrder=\"XYZ\",Ht.RotationOrders=[\"XYZ\",\"YZX\",\"ZXY\",\"XZY\",\"YXZ\",\"ZYX\"];class Gt{constructor(){this.mask=1}set(t){this.mask=1<<t|0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask&t.mask)}}let kt=0;const Vt=new $,Wt=new K,jt=new Rt,qt=new $,Xt=new $,Yt=new $,Zt=new K,Jt=new $(1,0,0),Qt=new $(0,1,0),Kt=new $(0,0,1),$t={type:\"added\"},te={type:\"removed\"};class ee extends I{constructor(){super(),Object.defineProperty(this,\"id\",{value:kt++}),this.uuid=O(),this.name=\"\",this.type=\"Object3D\",this.parent=null,this.children=[],this.up=ee.DefaultUp.clone();const t=new $,e=new Ht,n=new K,i=new $(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Rt},normalMatrix:{value:new V}}),this.matrix=new Rt,this.matrixWorld=new Rt,this.matrixAutoUpdate=ee.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new Gt,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Wt.setFromAxisAngle(t,e),this.quaternion.multiply(Wt),this}rotateOnWorldAxis(t,e){return Wt.setFromAxisAngle(t,e),this.quaternion.premultiply(Wt),this}rotateX(t){return this.rotateOnAxis(Jt,t)}rotateY(t){return this.rotateOnAxis(Qt,t)}rotateZ(t){return this.rotateOnAxis(Kt,t)}translateOnAxis(t,e){return Vt.copy(t).applyQuaternion(this.quaternion),this.position.add(Vt.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(Jt,t)}translateY(t){return this.translateOnAxis(Qt,t)}translateZ(t){return this.translateOnAxis(Kt,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4(jt.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?qt.copy(t):qt.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),Xt.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?jt.lookAt(Xt,qt,this.up):jt.lookAt(qt,Xt,this.up),this.quaternion.setFromRotationMatrix(jt),i&&(jt.extractRotation(i.matrixWorld),Wt.setFromRotationMatrix(jt),this.quaternion.premultiply(Wt.invert()))}add(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent($t)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",t),this)}remove(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(te)),this}removeFromParent(){const t=this.parent;return null!==t&&t.remove(this),this}clear(){for(let t=0;t<this.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(te)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),jt.copy(this.matrixWorld).invert(),null!==t.parent&&(t.parent.updateWorldMatrix(!0,!1),jt.multiply(t.parent.matrixWorld)),t.applyMatrix4(jt),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\"id\",t)}getObjectByName(t){return this.getObjectByProperty(\"name\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Xt,t,Yt),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Xt,Zt,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t&&null!==n&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e<n;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\"string\"==typeof t,n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\"Object\",generator:\"Object3D.toJSON\"});const i={};function r(e,n){return void 0===e[n.uuid]&&(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\"\"!==this.name&&(i.name=this.name),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),!1===this.frustumCulled&&(i.frustumCulled=!1),0!==this.renderOrder&&(i.renderOrder=this.renderOrder),\"{}\"!==JSON.stringify(this.userData)&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type=\"InstancedMesh\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e<i;e++){const i=n[e];r(t.shapes,i)}else r(t.shapes,n)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(r(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n<i;n++)e.push(r(t.materials,this.material[n]));i.material=e}else i.material=r(t.materials,this.material);if(this.children.length>0){i.children=[];for(let e=0;e<this.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let e=0;e<this.animations.length;e++){const n=this.animations[e];i.animations.push(r(t.animations,n))}}if(e){const e=s(t.geometries),i=s(t.materials),r=s(t.textures),a=s(t.images),o=s(t.shapes),l=s(t.skeletons),c=s(t.animations);e.length>0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e<t.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}ee.DefaultUp=new $(0,1,0),ee.DefaultMatrixAutoUpdate=!0,ee.prototype.isObject3D=!0;const ne=new $,ie=new $,re=new $,se=new $,ae=new $,oe=new $,le=new $,ce=new $,he=new $,ue=new $;class de{constructor(t=new $,e=new $,n=new $){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),ne.subVectors(t,e),i.cross(ne);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){ne.subVectors(i,e),ie.subVectors(n,e),re.subVectors(t,e);const s=ne.dot(ne),a=ne.dot(ie),o=ne.dot(re),l=ie.dot(ie),c=ie.dot(re),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,se),se.x>=0&&se.y>=0&&se.x+se.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,se),o.set(0,0),o.addScaledVector(r,se.x),o.addScaledVector(s,se.y),o.addScaledVector(a,se.z),o}static isFrontFacing(t,e,n,i){return ne.subVectors(n,e),ie.subVectors(t,e),ne.cross(ie).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return ne.subVectors(this.c,this.b),ie.subVectors(this.a,this.b),.5*ne.cross(ie).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return de.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return de.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return de.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return de.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return de.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,a;ae.subVectors(i,n),oe.subVectors(r,n),ce.subVectors(t,n);const o=ae.dot(ce),l=oe.dot(ce);if(o<=0&&l<=0)return e.copy(n);he.subVectors(t,i);const c=ae.dot(he),h=oe.dot(he);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(n).addScaledVector(ae,s);ue.subVectors(t,r);const d=ae.dot(ue),p=oe.dot(ue);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(n).addScaledVector(oe,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return le.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(le,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(ae,s).addScaledVector(oe,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let pe=0;class me extends I{constructor(){super(),Object.defineProperty(this,\"id\",{value:pe++}),this.uuid=O(),this.name=\"\",this.type=\"Material\",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=i,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=C,this.stencilZFail=C,this.stencilZPass=C,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}onBuild(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\"THREE.Material: '\"+e+\"' parameter is undefined.\");continue}if(\"shading\"===e){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(\"THREE.\"+this.type+\": '\"+e+\"' is not a property of this material.\")}}toJSON(t){const e=void 0===t||\"string\"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\"Material\",generator:\"Material.toJSON\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\"\"!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),this.sheen&&this.sheen.isColor&&(n.sheen=this.sheen.getHex()),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),\"round\"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),\"round\"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),\"{}\"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}set needsUpdate(t){!0===t&&this.version++}}me.prototype.isMaterial=!0;const fe={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},ge={h:0,s:0,l:0},ve={h:0,s:0,l:0};function ye(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function xe(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function _e(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class we{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):\"number\"==typeof t?this.setHex(t):\"string\"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){var i;if(t=(t%(i=1)+i)%i,e=B(e,0,1),n=B(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=ye(r,i,t+1/3),this.g=ye(r,i,t),this.b=ye(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn(\"THREE.Color: Alpha component of \"+t+\" will be ignored.\")}let n;if(n=/^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case\"rgb\":case\"rgba\":if(t=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\"hsl\":case\"hsla\":if(t=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\\#([A-Fa-f\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=fe[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\"THREE.Color: Unknown color \"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=xe(t.r),this.g=xe(t.g),this.b=xe(t.b),this}copyLinearToSRGB(t){return this.r=_e(t.r),this.g=_e(t.g),this.b=_e(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return(\"000000\"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let a,o;const l=(s+r)/2;if(s===r)a=0,o=0;else{const t=r-s;switch(o=l<=.5?t/(r+s):t/(2-r-s),r){case e:a=(n-i)/t+(n<i?6:0);break;case n:a=(i-e)/t+2;break;case i:a=(e-n)/t+4}a/=6}return t.h=a,t.s=o,t.l=l,t}getStyle(){return\"rgb(\"+(255*this.r|0)+\",\"+(255*this.g|0)+\",\"+(255*this.b|0)+\")\"}offsetHSL(t,e,n){return this.getHSL(ge),ge.h+=t,ge.s+=e,ge.l+=n,this.setHSL(ge.h,ge.s,ge.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(ge),t.getHSL(ve);const n=U(ge.h,ve.h,e),i=U(ge.s,ve.s,e),r=U(ge.l,ve.l,e);return this.setHSL(n,i,r),this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized&&(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}we.NAMES=fe,we.prototype.isColor=!0,we.prototype.r=1,we.prototype.g=1,we.prototype.b=1;class Me extends me{constructor(t){super(),this.type=\"MeshBasicMaterial\",this.color=new we(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this}}Me.prototype.isMeshBasicMaterial=!0;const be=new $,Se=new k;class Te{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.name=\"\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=R,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i<r;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",i),r=new we),e[n++]=r.r,e[n++]=r.g,e[n++]=r.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",i),r=new k),e[n++]=r.x,e[n++]=r.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",i),r=new $),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",i),r=new Z),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z,e[n++]=r.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e<n;e++)Se.fromBufferAttribute(this,e),Se.applyMatrix3(t),this.setXY(e,Se.x,Se.y);else if(3===this.itemSize)for(let e=0,n=this.count;e<n;e++)be.fromBufferAttribute(this,e),be.applyMatrix3(t),this.setXYZ(e,be.x,be.y,be.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)be.x=this.getX(e),be.y=this.getY(e),be.z=this.getZ(e),be.applyMatrix4(t),this.setXYZ(e,be.x,be.y,be.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)be.x=this.getX(e),be.y=this.getY(e),be.z=this.getZ(e),be.applyNormalMatrix(t),this.setXYZ(e,be.x,be.y,be.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)be.x=this.getX(e),be.y=this.getY(e),be.z=this.getZ(e),be.transformDirection(t),this.setXYZ(e,be.x,be.y,be.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\"\"!==this.name&&(t.name=this.name),this.usage!==R&&(t.usage=this.usage),0===this.updateRange.offset&&-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}Te.prototype.isBufferAttribute=!0;class Ee extends Te{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class Ae extends Te{constructor(t,e,n){super(new Uint32Array(t),e,n)}}(class extends Te{constructor(t,e,n){super(new Uint16Array(t),e,n)}}).prototype.isFloat16BufferAttribute=!0;class Le extends Te{constructor(t,e,n){super(new Float32Array(t),e,n)}}function Ce(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n<i;++n)t[n]>e&&(e=t[n]);return e}let Re=0;const Pe=new Rt,De=new ee,Ie=new $,Ne=new nt,ze=new nt,Fe=new $;class Oe extends I{constructor(){super(),Object.defineProperty(this,\"id\",{value:Re++}),this.uuid=O(),this.name=\"\",this.type=\"BufferGeometry\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Ce(t)>65535?Ae:Ee)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new V).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return Pe.makeRotationFromQuaternion(t),this.applyMatrix4(Pe),this}rotateX(t){return Pe.makeRotationX(t),this.applyMatrix4(Pe),this}rotateY(t){return Pe.makeRotationY(t),this.applyMatrix4(Pe),this}rotateZ(t){return Pe.makeRotationZ(t),this.applyMatrix4(Pe),this}translate(t,e,n){return Pe.makeTranslation(t,e,n),this.applyMatrix4(Pe),this}scale(t,e,n){return Pe.makeScale(t,e,n),this.applyMatrix4(Pe),this}lookAt(t){return De.lookAt(t),De.updateMatrix(),this.applyMatrix4(De.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Ie).negate(),this.translate(Ie.x,Ie.y,Ie.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\"position\",new Le(e,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new nt);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingBox.set(new $(-1/0,-1/0,-1/0),new $(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];Ne.setFromBufferAttribute(n),this.morphTargetsRelative?(Fe.addVectors(this.boundingBox.min,Ne.min),this.boundingBox.expandByPoint(Fe),Fe.addVectors(this.boundingBox.max,Ne.max),this.boundingBox.expandByPoint(Fe)):(this.boundingBox.expandByPoint(Ne.min),this.boundingBox.expandByPoint(Ne.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new wt);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingSphere.set(new $,1/0);if(t){const n=this.boundingSphere.center;if(Ne.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];ze.setFromBufferAttribute(n),this.morphTargetsRelative?(Fe.addVectors(Ne.min,ze.min),Ne.expandByPoint(Fe),Fe.addVectors(Ne.max,ze.max),Ne.expandByPoint(Fe)):(Ne.expandByPoint(ze.min),Ne.expandByPoint(ze.max))}Ne.getCenter(n);let i=0;for(let e=0,r=t.count;e<r;e++)Fe.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(Fe));if(e)for(let r=0,s=e.length;r<s;r++){const s=e[r],a=this.morphTargetsRelative;for(let e=0,r=s.count;e<r;e++)Fe.fromBufferAttribute(s,e),a&&(Ie.fromBufferAttribute(t,e),Fe.add(Ie)),i=Math.max(i,n.distanceToSquared(Fe))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}computeFaceNormals(){}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\");const n=t.array,i=e.position.array,r=e.normal.array,s=e.uv.array,a=i.length/3;void 0===e.tangent&&this.setAttribute(\"tangent\",new Te(new Float32Array(4*a),4));const o=e.tangent.array,l=[],c=[];for(let t=0;t<a;t++)l[t]=new $,c[t]=new $;const h=new $,u=new $,d=new $,p=new k,m=new k,f=new k,g=new $,v=new $;function y(t,e,n){h.fromArray(i,3*t),u.fromArray(i,3*e),d.fromArray(i,3*n),p.fromArray(s,2*t),m.fromArray(s,2*e),f.fromArray(s,2*n),u.sub(h),d.sub(h),m.sub(p),f.sub(p);const r=1/(m.x*f.y-f.x*m.y);isFinite(r)&&(g.copy(u).multiplyScalar(f.y).addScaledVector(d,-m.y).multiplyScalar(r),v.copy(d).multiplyScalar(m.x).addScaledVector(u,-f.x).multiplyScalar(r),l[t].add(g),l[e].add(g),l[n].add(g),c[t].add(v),c[e].add(v),c[n].add(v))}let x=this.groups;0===x.length&&(x=[{start:0,count:n.length}]);for(let t=0,e=x.length;t<e;++t){const e=x[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)y(n[t+0],n[t+1],n[t+2])}const _=new $,w=new $,M=new $,b=new $;function S(t){M.fromArray(r,3*t),b.copy(M);const e=l[t];_.copy(e),_.sub(M.multiplyScalar(M.dot(e))).normalize(),w.crossVectors(b,e);const n=w.dot(c[t])<0?-1:1;o[4*t]=_.x,o[4*t+1]=_.y,o[4*t+2]=_.z,o[4*t+3]=n}for(let t=0,e=x.length;t<e;++t){const e=x[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)S(n[t+0]),S(n[t+1]),S(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\"position\");if(void 0!==e){let n=this.getAttribute(\"normal\");if(void 0===n)n=new Te(new Float32Array(3*e.count),3),this.setAttribute(\"normal\",n);else for(let t=0,e=n.count;t<e;t++)n.setXYZ(t,0,0,0);const i=new $,r=new $,s=new $,a=new $,o=new $,l=new $,c=new $,h=new $;if(t)for(let u=0,d=t.count;u<d;u+=3){const d=t.getX(u+0),p=t.getX(u+1),m=t.getX(u+2);i.fromBufferAttribute(e,d),r.fromBufferAttribute(e,p),s.fromBufferAttribute(e,m),c.subVectors(s,r),h.subVectors(i,r),c.cross(h),a.fromBufferAttribute(n,d),o.fromBufferAttribute(n,p),l.fromBufferAttribute(n,m),a.add(c),o.add(c),l.add(c),n.setXYZ(d,a.x,a.y,a.z),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(m,l.x,l.y,l.z)}else for(let t=0,a=e.count;t<a;t+=3)i.fromBufferAttribute(e,t+0),r.fromBufferAttribute(e,t+1),s.fromBufferAttribute(e,t+2),c.subVectors(s,r),h.subVectors(i,r),c.cross(h),n.setXYZ(t+0,c.x,c.y,c.z),n.setXYZ(t+1,c.x,c.y,c.z),n.setXYZ(t+2,c.x,c.y,c.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",t);void 0===e&&(e=0,console.warn(\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const r=n[i].array,s=t.attributes[i],a=s.array,o=s.itemSize*e,l=Math.min(a.length,r.length-o);for(let t=0,e=o;t<l;t++,e++)r[e]=a[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)Fe.fromBufferAttribute(t,e),Fe.normalize(),t.setXYZ(e,Fe.x,Fe.y,Fe.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,r=t.normalized,s=new n.constructor(e.length*i);let a=0,o=0;for(let r=0,l=e.length;r<l;r++){a=t.isInterleavedBufferAttribute?e[r]*t.data.stride+t.offset:e[r]*i;for(let t=0;t<i;t++)s[o++]=n[a++]}return new Te(s,i,r)}if(null===this.index)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"),this;const e=new Oe,n=this.index.array,i=this.attributes;for(const r in i){const s=t(i[r],n);e.setAttribute(r,s)}const r=this.morphAttributes;for(const i in r){const s=[],a=r[i];for(let e=0,i=a.length;e<i;e++){const i=t(a[e],n);s.push(i)}e.morphAttributes[i]=s}e.morphTargetsRelative=this.morphTargetsRelative;const s=this.groups;for(let t=0,n=s.length;t<n;t++){const n=s[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};if(t.uuid=this.uuid,t.type=this.type,\"\"!==this.name&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e<i;e++){const i=n[e];s.push(i.toJSON(t.data))}s.length>0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new Oe).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t<r;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const s=t.groups;for(let t=0,e=s.length;t<e;t++){const e=s[t];this.addGroup(e.start,e.count,e.materialIndex)}const a=t.boundingBox;null!==a&&(this.boundingBox=a.clone());const o=t.boundingSphere;return null!==o&&(this.boundingSphere=o.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}Oe.prototype.isBufferGeometry=!0;const Be=new Rt,Ue=new Ct,He=new wt,Ge=new $,ke=new $,Ve=new $,We=new $,je=new $,qe=new $,Xe=new $,Ye=new $,Ze=new $,Je=new k,Qe=new k,Ke=new k,$e=new $,tn=new $;class en extends ee{constructor(t=new Oe,e=new Me){super(),this.type=\"Mesh\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),He.copy(n.boundingSphere),He.applyMatrix4(r),!1===t.ray.intersectsSphere(He))return;if(Be.copy(r).invert(),Ue.copy(t.ray).applyMatrix4(Be),null!==n.boundingBox&&!1===Ue.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n<p;n++){const p=u[n],m=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(p.start+p.count,d.start+d.count);n<i;n+=3){const i=r.getX(n),u=r.getX(n+1),d=r.getX(n+2);s=nn(this,m,t,Ue,a,o,l,c,h,i,u,d),s&&(s.faceIndex=Math.floor(n/3),s.face.materialIndex=p.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),u=Math.min(r.count,d.start+d.count);n<u;n+=3){const u=r.getX(n),d=r.getX(n+1),p=r.getX(n+2);s=nn(this,i,t,Ue,a,o,l,c,h,u,d,p),s&&(s.faceIndex=Math.floor(n/3),e.push(s))}}else if(void 0!==a)if(Array.isArray(i))for(let n=0,r=u.length;n<r;n++){const r=u[n],p=i[r.materialIndex];for(let n=Math.max(r.start,d.start),i=Math.min(r.start+r.count,d.start+d.count);n<i;n+=3){s=nn(this,p,t,Ue,a,o,l,c,h,n,n+1,n+2),s&&(s.faceIndex=Math.floor(n/3),s.face.materialIndex=r.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),r=Math.min(a.count,d.start+d.count);n<r;n+=3){s=nn(this,i,t,Ue,a,o,l,c,h,n,n+1,n+2),s&&(s.faceIndex=Math.floor(n/3),e.push(s))}}}else n.isGeometry&&console.error(\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}function nn(t,e,n,i,r,s,a,o,l,c,h,u){Ge.fromBufferAttribute(r,c),ke.fromBufferAttribute(r,h),Ve.fromBufferAttribute(r,u);const d=t.morphTargetInfluences;if(e.morphTargets&&s&&d){Xe.set(0,0,0),Ye.set(0,0,0),Ze.set(0,0,0);for(let t=0,e=s.length;t<e;t++){const e=d[t],n=s[t];0!==e&&(We.fromBufferAttribute(n,c),je.fromBufferAttribute(n,h),qe.fromBufferAttribute(n,u),a?(Xe.addScaledVector(We,e),Ye.addScaledVector(je,e),Ze.addScaledVector(qe,e)):(Xe.addScaledVector(We.sub(Ge),e),Ye.addScaledVector(je.sub(ke),e),Ze.addScaledVector(qe.sub(Ve),e)))}Ge.add(Xe),ke.add(Ye),Ve.add(Ze)}t.isSkinnedMesh&&(t.boneTransform(c,Ge),t.boneTransform(h,ke),t.boneTransform(u,Ve));const p=function(t,e,n,i,r,s,a,o){let l;if(l=1===e.side?i.intersectTriangle(a,s,r,!0,o):i.intersectTriangle(r,s,a,2!==e.side,o),null===l)return null;tn.copy(o),tn.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(tn);return c<n.near||c>n.far?null:{distance:c,point:tn.clone(),object:t}}(t,e,n,i,Ge,ke,Ve,$e);if(p){o&&(Je.fromBufferAttribute(o,c),Qe.fromBufferAttribute(o,h),Ke.fromBufferAttribute(o,u),p.uv=de.getUV($e,Ge,ke,Ve,Je,Qe,Ke,new k)),l&&(Je.fromBufferAttribute(l,c),Qe.fromBufferAttribute(l,h),Ke.fromBufferAttribute(l,u),p.uv2=de.getUV($e,Ge,ke,Ve,Je,Qe,Ke,new k));const t={a:c,b:h,c:u,normal:new $,materialIndex:0};de.getNormal(Ge,ke,Ve,t.normal),p.face=t}return p}en.prototype.isMesh=!0;class rn extends Oe{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type=\"BoxGeometry\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,m,f,g,v){const y=s/f,x=p/g,_=s/2,w=p/2,M=m/2,b=f+1,S=g+1;let T=0,E=0;const A=new $;for(let s=0;s<S;s++){const a=s*x-w;for(let o=0;o<b;o++){const u=o*y-_;A[t]=u*i,A[e]=a*r,A[n]=M,l.push(A.x,A.y,A.z),A[t]=0,A[e]=0,A[n]=m>0?1:-1,c.push(A.x,A.y,A.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t<g;t++)for(let e=0;e<f;e++){const n=u+e+b*t,i=u+e+b*(t+1),r=u+(e+1)+b*(t+1),s=u+(e+1)+b*t;o.push(n,i,s),o.push(i,r,s),E+=6}a.addGroup(d,E,v),d+=E,u+=T}p(\"z\",\"y\",\"x\",-1,-1,n,e,t,s,r,0),p(\"z\",\"y\",\"x\",1,-1,n,e,-t,s,r,1),p(\"x\",\"z\",\"y\",1,1,t,n,e,i,s,2),p(\"x\",\"z\",\"y\",1,-1,t,n,-e,i,s,3),p(\"x\",\"y\",\"z\",1,-1,t,e,n,i,r,4),p(\"x\",\"y\",\"z\",-1,-1,t,e,-n,i,r,5),this.setIndex(o),this.setAttribute(\"position\",new Le(l,3)),this.setAttribute(\"normal\",new Le(c,3)),this.setAttribute(\"uv\",new Le(h,2))}static fromJSON(t){return new rn(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function sn(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r&&(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function an(t){const e={};for(let n=0;n<t.length;n++){const i=sn(t[n]);for(const t in i)e[t]=i[t]}return e}const on={clone:sn,merge:an};class ln extends me{constructor(t){super(),this.type=\"ShaderMaterial\",this.defines={},this.uniforms={},this.vertexShader=\"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\",this.fragmentShader=\"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t&&(void 0!==t.attributes&&console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=sn(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i&&i.isTexture?e.uniforms[n]={type:\"t\",value:i.toJSON(t).uuid}:i&&i.isColor?e.uniforms[n]={type:\"c\",value:i.getHex()}:i&&i.isVector2?e.uniforms[n]={type:\"v2\",value:i.toArray()}:i&&i.isVector3?e.uniforms[n]={type:\"v3\",value:i.toArray()}:i&&i.isVector4?e.uniforms[n]={type:\"v4\",value:i.toArray()}:i&&i.isMatrix3?e.uniforms[n]={type:\"m3\",value:i.toArray()}:i&&i.isMatrix4?e.uniforms[n]={type:\"m4\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}ln.prototype.isShaderMaterial=!0;class cn extends ee{constructor(){super(),this.type=\"Camera\",this.matrixWorldInverse=new Rt,this.projectionMatrix=new Rt,this.projectionMatrixInverse=new Rt}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}cn.prototype.isCamera=!0;class hn extends cn{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\"PerspectiveCamera\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*F*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*z*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*F*Math.atan(Math.tan(.5*z*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*z*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}hn.prototype.isPerspectiveCamera=!0;const un=90;class dn extends ee{constructor(t,e,n){if(super(),this.type=\"CubeCamera\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\");this.renderTarget=n;const i=new hn(un,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new $(1,0,0)),this.add(i);const r=new hn(un,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new $(-1,0,0)),this.add(r);const s=new hn(un,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new $(0,1,0)),this.add(s);const a=new hn(un,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new $(0,-1,0)),this.add(a);const o=new hn(un,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new $(0,0,1)),this.add(o);const l=new hn(un,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new $(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class pn extends X{constructor(t,e,n,i,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:301,n,i,r,s,a=void 0!==a?a:g,o,l,c),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}pn.prototype.isCubeTexture=!0;class mn extends J{constructor(t,e,n){Number.isInteger(e)&&(console.warn(\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\"),e=n),super(t,t,e),e=e||{},this.texture=new pn(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:l,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=v,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\"\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\n\\t\\t\\t\\t\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\t\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\n\\t\\t\\t\\t\\t#include <begin_vertex>\\n\\t\\t\\t\\t\\t#include <project_vertex>\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t\",fragmentShader:\"\\n\\n\\t\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\t#include <common>\\n\\n\\t\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\t\\tvec3 direction = normalize( vWorldDirection );\\n\\n\\t\\t\\t\\t\\tvec2 sampleUV = equirectUv( direction );\\n\\n\\t\\t\\t\\t\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t\"},i=new rn(5,5,5),r=new ln({name:\"CubemapFromEquirect\",uniforms:sn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new en(i,r),a=e.minFilter;e.minFilter===c&&(e.minFilter=l);return new dn(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}mn.prototype.isWebGLCubeRenderTarget=!0;const fn=new $,gn=new $,vn=new V;class yn{constructor(t=new $(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=fn.subVectors(n,e).cross(gn.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(fn),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||vn.getNormalMatrix(t),i=this.coplanarPoint(fn).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}yn.prototype.isPlane=!0;const xn=new wt,_n=new $;class wn{constructor(t=new yn,e=new yn,n=new yn,i=new yn,r=new yn,s=new yn){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],m=n[11],f=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-o,m-u,y-f).normalize(),e[1].setComponents(a+i,h+o,m+u,y+f).normalize(),e[2].setComponents(a+r,h+l,m+d,y+g).normalize(),e[3].setComponents(a-r,h-l,m-d,y-g).normalize(),e[4].setComponents(a-s,h-c,m-p,y-v).normalize(),e[5].setComponents(a+s,h+c,m+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),xn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(xn)}intersectsSprite(t){return xn.center.set(0,0,0),xn.radius=.7071067811865476,xn.applyMatrix4(t.matrixWorld),this.intersectsSphere(xn)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)<i)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const i=e[n];if(_n.x=i.normal.x>0?t.max.x:t.min.x,_n.y=i.normal.y>0?t.max.y:t.min.y,_n.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(_n)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Mn(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function bn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version<e.version)&&i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute&&(e=e.data);const s=i.get(e);void 0===s?i.set(e,function(e,i){const r=e.array,s=e.usage,a=t.createBuffer();t.bindBuffer(i,a),t.bufferData(i,r,s),e.onUploadCallback();let o=5126;return r instanceof Float32Array?o=5126:r instanceof Float64Array?console.warn(\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\"):r instanceof Uint16Array?e.isFloat16BufferAttribute?n?o=5131:console.warn(\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\"):o=5123:r instanceof Int16Array?o=5122:r instanceof Uint32Array?o=5125:r instanceof Int32Array?o=5124:r instanceof Int8Array?o=5120:(r instanceof Uint8Array||r instanceof Uint8ClampedArray)&&(o=5121),{buffer:a,type:o,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}(e,r)):s.version<e.version&&(!function(e,i,r){const s=i.array,a=i.updateRange;t.bindBuffer(r,e),-1===a.count?t.bufferSubData(r,0,s):(n?t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s,a.offset,a.count):t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s.subarray(a.offset,a.offset+a.count)),a.count=-1)}(s.buffer,e,r),s.version=e.version)}}}class Sn extends Oe{constructor(t=1,e=1,n=1,i=1){super(),this.type=\"PlaneGeometry\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const r=t/2,s=e/2,a=Math.floor(n),o=Math.floor(i),l=a+1,c=o+1,h=t/a,u=e/o,d=[],p=[],m=[],f=[];for(let t=0;t<c;t++){const e=t*u-s;for(let n=0;n<l;n++){const i=n*h-r;p.push(i,-e,0),m.push(0,0,1),f.push(n/a),f.push(1-t/o)}}for(let t=0;t<o;t++)for(let e=0;e<a;e++){const n=e+l*t,i=e+l*(t+1),r=e+1+l*(t+1),s=e+1+l*t;d.push(n,i,s),d.push(i,r,s)}this.setIndex(d),this.setAttribute(\"position\",new Le(p,3)),this.setAttribute(\"normal\",new Le(m,3)),this.setAttribute(\"uv\",new Le(f,2))}static fromJSON(t){return new Sn(t.width,t.height,t.widthSegments,t.heightSegments)}}const Tn={alphamap_fragment:\"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\",alphamap_pars_fragment:\"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",alphatest_fragment:\"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\",aomap_fragment:\"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\",aomap_pars_fragment:\"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\",begin_vertex:\"vec3 transformed = vec3( position );\",beginnormal_vertex:\"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\",bsdfs:\"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\",bumpmap_pars_fragment:\"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\",clipping_planes_fragment:\"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\",clipping_planes_pars_fragment:\"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\",clipping_planes_pars_vertex:\"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\",clipping_planes_vertex:\"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\",color_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\",color_pars_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_pars_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\",common:\"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\",cube_uv_reflection_fragment:\"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\",defaultnormal_vertex:\"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\",displacementmap_pars_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\",displacementmap_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\",emissivemap_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\",emissivemap_pars_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\",encodings_fragment:\"gl_FragColor = linearToOutputTexel( gl_FragColor );\",encodings_pars_fragment:\"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\",envmap_fragment:\"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\",envmap_common_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\",envmap_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\",envmap_pars_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\",envmap_physical_pars_fragment:\"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\",envmap_vertex:\"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\",fog_vertex:\"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\",fog_pars_vertex:\"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\",fog_fragment:\"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\",fog_pars_fragment:\"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\",gradientmap_pars_fragment:\"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\",lightmap_fragment:\"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\",lightmap_pars_fragment:\"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\",lights_lambert_vertex:\"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\",lights_pars_begin:\"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\",lights_toon_fragment:\"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\",lights_toon_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\",lights_phong_fragment:\"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\",lights_phong_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\",lights_physical_fragment:\"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\",lights_physical_pars_fragment:\"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(    0, 1,    0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\",lights_fragment_begin:\"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\",lights_fragment_maps:\"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\",lights_fragment_end:\"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\",logdepthbuf_fragment:\"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\",logdepthbuf_pars_fragment:\"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\",logdepthbuf_pars_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\",logdepthbuf_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\",map_fragment:\"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\",map_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\",map_particle_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\",map_particle_pars_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",metalnessmap_fragment:\"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\",metalnessmap_pars_fragment:\"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\",morphnormal_vertex:\"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\",morphtarget_pars_vertex:\"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\",morphtarget_vertex:\"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\",normal_fragment_begin:\"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\",normal_fragment_maps:\"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\",normalmap_pars_fragment:\"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\",clearcoat_normal_fragment_begin:\"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\",clearcoat_normal_fragment_maps:\"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\",clearcoat_pars_fragment:\"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\",packing:\"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\",premultiplied_alpha_fragment:\"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\",project_vertex:\"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\",dithering_fragment:\"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\",dithering_pars_fragment:\"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\",roughnessmap_fragment:\"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\",roughnessmap_pars_fragment:\"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\",shadowmap_pars_fragment:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\",shadowmap_pars_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\",shadowmap_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\",shadowmask_pars_fragment:\"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\",skinbase_vertex:\"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\",skinning_pars_vertex:\"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\",skinning_vertex:\"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\",skinnormal_vertex:\"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\",specularmap_fragment:\"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\",specularmap_pars_fragment:\"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\",tonemapping_fragment:\"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\",tonemapping_pars_fragment:\"#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3(  1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108,  1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605,  1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\",transmission_fragment:\"#ifdef USE_TRANSMISSION\\n\\tfloat transmissionFactor = transmission;\\n\\tfloat thicknessFactor = thickness;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSNMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\\n\\tvec3 transmission = transmissionFactor * getIBLVolumeRefraction(\\n\\t\\tnormal, v, roughnessFactor, material.diffuseColor, totalSpecular,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationColor, attenuationDistance );\\n\\ttotalDiffuse = mix( totalDiffuse, transmission, transmissionFactor );\\n#endif\",transmission_pars_fragment:\"#ifdef USE_TRANSMISSION\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec4 vWorldPosition;\\n\\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix) {\\n\\t\\tvec3 refractionVector = refract(-v, normalize(n), 1.0 / ior);\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length(vec3(modelMatrix[0].xyz));\\n\\t\\tmodelScale.y = length(vec3(modelMatrix[1].xyz));\\n\\t\\tmodelScale.z = length(vec3(modelMatrix[2].xyz));\\n\\t\\treturn normalize(refractionVector) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness(float roughness, float ior) {\\n\\t\\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\\n\\t}\\n\\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\\n\\t\\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\\n\\t\\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\\n\\t}\\n\\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tif (attenuationDistance == 0.0) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, float perceptualRoughness, vec3 baseColor, vec3 specularColor,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\n\\t\\tvec3 attenuationColor, float attenuationDistance) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\\n\\t\\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\\n\\t}\\n#endif\",uv_pars_fragment:\"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\",uv_pars_vertex:\"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\",uv_vertex:\"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\",uv2_pars_fragment:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\",uv2_pars_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\",uv2_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\",worldpos_vertex:\"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\",background_frag:\"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\",background_vert:\"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\",cube_frag:\"#include <envmap_common_pars_fragment>\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\",cube_vert:\"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\",depth_frag:\"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\",depth_vert:\"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\",distanceRGBA_frag:\"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\",distanceRGBA_vert:\"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\",equirect_frag:\"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\",equirect_vert:\"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\",linedashed_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\",linedashed_vert:\"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\",meshbasic_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\",meshbasic_vert:\"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\",meshlambert_frag:\"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\",meshlambert_vert:\"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\",meshmatcap_frag:\"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\",meshmatcap_vert:\"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}\",meshtoon_frag:\"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\",meshtoon_vert:\"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\",meshphong_frag:\"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\",meshphong_vert:\"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\",meshphysical_frag:\"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform vec3 attenuationColor;\\n\\tuniform float attenuationDistance;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <bsdfs>\\n#include <transmission_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include <transmission_fragment>\\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\",meshphysical_vert:\"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec4 vWorldPosition;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition;\\n#endif\\n}\",normal_frag:\"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\",normal_vert:\"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\",points_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\",points_vert:\"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\",shadow_frag:\"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\",shadow_vert:\"#include <common>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\",sprite_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\",sprite_vert:\"uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\"},En={common:{diffuse:{value:new we(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new V},uv2Transform:{value:new V},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new k(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new we(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new we(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new V}},sprite:{diffuse:{value:new we(16777215)},opacity:{value:1},center:{value:new k(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new V}}},An={basic:{uniforms:an([En.common,En.specularmap,En.envmap,En.aomap,En.lightmap,En.fog]),vertexShader:Tn.meshbasic_vert,fragmentShader:Tn.meshbasic_frag},lambert:{uniforms:an([En.common,En.specularmap,En.envmap,En.aomap,En.lightmap,En.emissivemap,En.fog,En.lights,{emissive:{value:new we(0)}}]),vertexShader:Tn.meshlambert_vert,fragmentShader:Tn.meshlambert_frag},phong:{uniforms:an([En.common,En.specularmap,En.envmap,En.aomap,En.lightmap,En.emissivemap,En.bumpmap,En.normalmap,En.displacementmap,En.fog,En.lights,{emissive:{value:new we(0)},specular:{value:new we(1118481)},shininess:{value:30}}]),vertexShader:Tn.meshphong_vert,fragmentShader:Tn.meshphong_frag},standard:{uniforms:an([En.common,En.envmap,En.aomap,En.lightmap,En.emissivemap,En.bumpmap,En.normalmap,En.displacementmap,En.roughnessmap,En.metalnessmap,En.fog,En.lights,{emissive:{value:new we(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Tn.meshphysical_vert,fragmentShader:Tn.meshphysical_frag},toon:{uniforms:an([En.common,En.aomap,En.lightmap,En.emissivemap,En.bumpmap,En.normalmap,En.displacementmap,En.gradientmap,En.fog,En.lights,{emissive:{value:new we(0)}}]),vertexShader:Tn.meshtoon_vert,fragmentShader:Tn.meshtoon_frag},matcap:{uniforms:an([En.common,En.bumpmap,En.normalmap,En.displacementmap,En.fog,{matcap:{value:null}}]),vertexShader:Tn.meshmatcap_vert,fragmentShader:Tn.meshmatcap_frag},points:{uniforms:an([En.points,En.fog]),vertexShader:Tn.points_vert,fragmentShader:Tn.points_frag},dashed:{uniforms:an([En.common,En.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Tn.linedashed_vert,fragmentShader:Tn.linedashed_frag},depth:{uniforms:an([En.common,En.displacementmap]),vertexShader:Tn.depth_vert,fragmentShader:Tn.depth_frag},normal:{uniforms:an([En.common,En.bumpmap,En.normalmap,En.displacementmap,{opacity:{value:1}}]),vertexShader:Tn.normal_vert,fragmentShader:Tn.normal_frag},sprite:{uniforms:an([En.sprite,En.fog]),vertexShader:Tn.sprite_vert,fragmentShader:Tn.sprite_frag},background:{uniforms:{uvTransform:{value:new V},t2D:{value:null}},vertexShader:Tn.background_vert,fragmentShader:Tn.background_frag},cube:{uniforms:an([En.envmap,{opacity:{value:1}}]),vertexShader:Tn.cube_vert,fragmentShader:Tn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Tn.equirect_vert,fragmentShader:Tn.equirect_frag},distanceRGBA:{uniforms:an([En.common,En.displacementmap,{referencePosition:{value:new $},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Tn.distanceRGBA_vert,fragmentShader:Tn.distanceRGBA_frag},shadow:{uniforms:an([En.lights,En.fog,{color:{value:new we(0)},opacity:{value:1}}]),vertexShader:Tn.shadow_vert,fragmentShader:Tn.shadow_frag}};function Ln(t,e,n,i,r){const s=new we(0);let a,o,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),l=e,d(s,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(s,l)},render:function(n,r){let p=!1,m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const f=t.xr,g=f.getSession&&f.getSession();g&&\"additive\"===g.environmentBlendMode&&(m=null),null===m?d(s,l):m&&m.isColor&&(d(m,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||306===m.mapping)?(void 0===o&&(o=new en(new rn(1,1,1),new ln({name:\"BackgroundCubeMaterial\",uniforms:sn(An.cube.uniforms),vertexShader:An.cube.vertexShader,fragmentShader:An.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\"normal\"),o.geometry.deleteAttribute(\"uv\"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,\"envMap\",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=m,o.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(o.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):m&&m.isTexture&&(void 0===a&&(a=new en(new Sn(2,2),new ln({name:\"BackgroundMaterial\",uniforms:sn(An.background.uniforms),vertexShader:An.background.vertexShader,fragmentShader:An.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\"normal\"),Object.defineProperty(a.material,\"map\",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),a.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function Cn(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get(\"OES_vertex_array_object\"),a=i.isWebGL2||null!==s,o={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t<r;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e<n;e++)t[e]=0}function m(t){f(t,0)}function f(n,r){const s=c.newAttributes,a=c.enabledAttributes,o=c.attributeDivisors;if(s[n]=1,0===a[n]&&(t.enableVertexAttribArray(n),a[n]=1),o[n]!==r){(i.isWebGL2?t:e.get(\"ANGLE_instanced_arrays\"))[i.isWebGL2?\"vertexAttribDivisor\":\"vertexAttribDivisorANGLE\"](n,r),o[n]=r}}function g(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,r=n.length;i<r;i++)n[i]!==e[i]&&(t.disableVertexAttribArray(i),n[i]=0)}function v(e,n,r,s,a,o){!0!==i.isWebGL2||5124!==r&&5125!==r?t.vertexAttribPointer(e,n,r,s,a,o):t.vertexAttribIPointer(e,n,r,a,o)}function y(){x(),c!==l&&(c=l,h(c.object))}function x(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(r,l,u,y,x){let _=!1;if(a){const e=function(e,n,r){const a=!0===r.wireframe;let l=o[e.id];void 0===l&&(l={},o[e.id]=l);let c=l[n.id];void 0===c&&(c={},l[n.id]=c);let h=c[a];void 0===h&&(h=d(i.isWebGL2?t.createVertexArray():s.createVertexArrayOES()),c[a]=h);return h}(y,u,l);c!==e&&(c=e,h(c.object)),_=function(t,e){const n=c.attributes,i=t.attributes;let r=0;for(const t in i){const e=n[t],s=i[t];if(void 0===e)return!0;if(e.attribute!==s)return!0;if(e.data!==s.data)return!0;r++}return c.attributesNum!==r||c.index!==e}(y,x),_&&function(t,e){const n={},i=t.attributes;let r=0;for(const t in i){const e=i[t],s={};s.attribute=e,e.data&&(s.data=e.data),n[t]=s,r++}c.attributes=n,c.attributesNum=r,c.index=e}(y,x)}else{const t=!0===l.wireframe;c.geometry===y.id&&c.program===u.id&&c.wireframe===t||(c.geometry=y.id,c.program=u.id,c.wireframe=t,_=!0)}!0===r.isInstancedMesh&&(_=!0),null!==x&&n.update(x,34963),_&&(!function(r,s,a,o){if(!1===i.isWebGL2&&(r.isInstancedMesh||o.isInstancedBufferGeometry)&&null===e.get(\"ANGLE_instanced_arrays\"))return;p();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i>=0){const s=l[e];if(void 0!==s){const e=s.normalized,r=s.itemSize,a=n.get(s);if(void 0===a)continue;const l=a.buffer,c=a.type,h=a.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,a=n.stride,u=s.offset;n&&n.isInstancedInterleavedBuffer?(f(i,n.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=n.meshPerAttribute*n.count)):m(i),t.bindBuffer(34962,l),v(i,r,c,e,a*h,u*h)}else s.isInstancedBufferAttribute?(f(i,s.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=s.meshPerAttribute*s.count)):m(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if(\"instanceMatrix\"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const s=e.buffer,a=e.type;f(i+0,1),f(i+1,1),f(i+2,1),f(i+3,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if(\"instanceColor\"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const s=e.buffer,a=e.type;f(i,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==x&&t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:m,disableUnusedAttributes:g}}function Rn(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,a,o){if(0===o)return;let l,c;if(r)l=t,c=\"drawArraysInstanced\";else if(l=e.get(\"ANGLE_instanced_arrays\"),c=\"drawArraysInstancedANGLE\",null===l)return void console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");l[c](s,i,a,o),n.update(a,s,o)}}function Pn(t,e,n){let i;function r(e){if(\"highp\"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return\"highp\";e=\"mediump\"}return\"mediump\"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?\"mediump\":\"lowp\"}const s=\"undefined\"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||\"undefined\"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:\"highp\";const o=r(a);o!==a&&(console.warn(\"THREE.WebGLRenderer:\",a,\"not supported, using\",o,\"instead.\"),a=o);const l=s||e.has(\"WEBGL_draw_buffers\"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),m=t.getParameter(34921),f=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=s||e.has(\"OES_texture_float\");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\"EXT_texture_filter_anisotropic\")){const n=e.get(\"EXT_texture_filter_anisotropic\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:s?t.getParameter(36183):0}}function Dn(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new yn,o=new V,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length<e)&&(c=new Float32Array(e));for(let e=0,n=i;e!==s;++e,n+=4)a.copy(t[e]).applyMatrix4(r,o),a.normal.toArray(c,n),c[n+3]=a.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=s,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,s){const a=0!==t.length||e||0!==i||r;return r=e,n=h(t,s,0),i=t.length,a},this.beginShadows=function(){s=!0,h(null)},this.endShadows=function(){s=!1,c()},this.setState=function(e,a,o){const u=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,m=t.get(e);if(!r||null===u||0===u.length||s&&!p)s?h(null):c();else{const t=s?0:i,e=4*t;let r=m.clippingState||null;l.value=r,r=h(u,a,e,o);for(let t=0;t!==e;++t)r[t]=n[t];m.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function In(t){let e=new WeakMap;function n(t,e){return 303===e?t.mapping=301:304===e&&(t.mapping=302),t}function i(t){const n=t.target;n.removeEventListener(\"dispose\",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){const s=r.mapping;if(303===s||304===s){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s&&s.height>0){const a=t.getRenderTarget(),o=new mn(s.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(a),r.addEventListener(\"dispose\",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function Nn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\"WEBGL_depth_texture\":i=t.getExtension(\"WEBGL_depth_texture\")||t.getExtension(\"MOZ_WEBGL_depth_texture\")||t.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case\"EXT_texture_filter_anisotropic\":i=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case\"WEBGL_compressed_texture_s3tc\":i=t.getExtension(\"WEBGL_compressed_texture_s3tc\")||t.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case\"WEBGL_compressed_texture_pvrtc\":i=t.getExtension(\"WEBGL_compressed_texture_pvrtc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\"EXT_color_buffer_float\"):(n(\"WEBGL_depth_texture\"),n(\"OES_texture_float\"),n(\"OES_texture_half_float\"),n(\"OES_texture_half_float_linear\"),n(\"OES_standard_derivatives\"),n(\"OES_element_index_uint\"),n(\"OES_vertex_array_object\"),n(\"ANGLE_instanced_arrays\")),n(\"OES_texture_float_linear\"),n(\"EXT_color_buffer_half_float\")},get:function(t){const e=n(t);return null===e&&console.warn(\"THREE.WebGLRenderer: \"+t+\" extension not supported.\"),e}}}function zn(t,e,n,i){const r={},s=new WeakMap;function a(t){const o=t.target;null!==o.index&&e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener(\"dispose\",a),delete r[o.id];const l=s.get(o);l&&(e.remove(l),s.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry&&delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e<i;e+=3){const i=t[e+0],r=t[e+1],s=t[e+2];n.push(i,r,r,s,s,i)}}else{const t=r.array;a=r.version;for(let e=0,i=t.length/3-1;e<i;e+=3){const t=e+0,i=e+1,r=e+2;n.push(t,i,i,r,r,t)}}const o=new(Ce(n)>65535?Ae:Ee)(n,1);o.version=a;const l=s.get(t);l&&e.remove(l),s.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener(\"dispose\",a),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t<i;t++)e.update(n[t],34962)}},getWireframeAttribute:function(t){const e=s.get(t);if(e){const n=t.index;null!==n&&e.version<n.version&&o(t)}else o(t);return s.get(t)}}}function Fn(t,e,n,i){const r=i.isWebGL2;let s,a,o;this.setMode=function(t){s=t},this.setIndex=function(t){a=t.type,o=t.bytesPerElement},this.render=function(e,i){t.drawElements(s,i,a,e*o),n.update(i,s,1)},this.renderInstances=function(i,l,c){if(0===c)return;let h,u;if(r)h=t,u=\"drawElementsInstanced\";else if(h=e.get(\"ANGLE_instanced_arrays\"),u=\"drawElementsInstancedANGLE\",null===h)return void console.error(\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");h[u](s,l,a,i*o,c),n.update(l,s,c)}}function On(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(t,n,i){switch(e.calls++,n){case 4:e.triangles+=i*(t/3);break;case 1:e.lines+=i*(t/2);break;case 3:e.lines+=i*(t-1);break;case 2:e.lines+=i*t;break;case 0:e.points+=i*t;break;default:console.error(\"THREE.WebGLInfo: Unknown draw mode:\",n)}}}}function Bn(t,e){return t[0]-e[0]}function Un(t,e){return Math.abs(e[1])-Math.abs(t[1])}function Hn(t){const e={},n=new Float32Array(8),i=[];for(let t=0;t<8;t++)i[t]=[t,0];return{update:function(r,s,a,o){const l=r.morphTargetInfluences,c=void 0===l?0:l.length;let h=e[s.id];if(void 0===h||h.length!==c){h=[];for(let t=0;t<c;t++)h[t]=[t,0];e[s.id]=h}for(let t=0;t<c;t++){const e=h[t];e[0]=t,e[1]=l[t]}h.sort(Un);for(let t=0;t<8;t++)t<c&&h[t][1]?(i[t][0]=h[t][0],i[t][1]=h[t][1]):(i[t][0]=Number.MAX_SAFE_INTEGER,i[t][1]=0);i.sort(Bn);const u=a.morphTargets&&s.morphAttributes.position,d=a.morphNormals&&s.morphAttributes.normal;let p=0;for(let t=0;t<8;t++){const e=i[t],r=e[0],a=e[1];r!==Number.MAX_SAFE_INTEGER&&a?(u&&s.getAttribute(\"morphTarget\"+t)!==u[r]&&s.setAttribute(\"morphTarget\"+t,u[r]),d&&s.getAttribute(\"morphNormal\"+t)!==d[r]&&s.setAttribute(\"morphNormal\"+t,d[r]),n[t]=a,p+=a):(u&&!0===s.hasAttribute(\"morphTarget\"+t)&&s.deleteAttribute(\"morphTarget\"+t),d&&!0===s.hasAttribute(\"morphNormal\"+t)&&s.deleteAttribute(\"morphNormal\"+t),n[t]=0)}const m=s.morphTargetsRelative?1:1-p;o.getUniforms().setValue(t,\"morphTargetBaseInfluence\",m),o.getUniforms().setValue(t,\"morphTargetInfluences\",n)}}}function Gn(t,e,n,i){let r=new WeakMap;function s(t){const e=t.target;e.removeEventListener(\"dispose\",s),n.remove(e.instanceMatrix),null!==e.instanceColor&&n.remove(e.instanceColor)}return{update:function(t){const a=i.render.frame,o=t.geometry,l=e.get(t,o);return r.get(l)!==a&&(e.update(l),r.set(l,a)),t.isInstancedMesh&&(!1===t.hasEventListener(\"dispose\",s)&&t.addEventListener(\"dispose\",s),n.update(t.instanceMatrix,34962),null!==t.instanceColor&&n.update(t.instanceColor,34962)),l},dispose:function(){r=new WeakMap}}}An.physical={uniforms:an([An.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new k(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new we(0)},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new k},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new we(0)}}]),vertexShader:Tn.meshphysical_vert,fragmentShader:Tn.meshphysical_frag};class kn extends X{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=o,this.minFilter=o,this.wrapR=s,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}kn.prototype.isDataTexture2DArray=!0;class Vn extends X{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=o,this.minFilter=o,this.wrapR=s,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}Vn.prototype.isDataTexture3D=!0;const Wn=new X,jn=new kn,qn=new Vn,Xn=new pn,Yn=[],Zn=[],Jn=new Float32Array(16),Qn=new Float32Array(9),Kn=new Float32Array(4);function $n(t,e,n){const i=t[0];if(i<=0||i>0)return t;const r=e*n;let s=Yn[r];if(void 0===s&&(s=new Float32Array(r),Yn[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function ti(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n<i;n++)if(t[n]!==e[n])return!1;return!0}function ei(t,e){for(let n=0,i=e.length;n<i;n++)t[n]=e[n]}function ni(t,e){let n=Zn[e];void 0===n&&(n=new Int32Array(e),Zn[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function ii(t,e){const n=this.cache;n[0]!==e&&(t.uniform1f(this.addr,e),n[0]=e)}function ri(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(ti(n,e))return;t.uniform2fv(this.addr,e),ei(n,e)}}function si(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r&&n[1]===e.g&&n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(ti(n,e))return;t.uniform3fv(this.addr,e),ei(n,e)}}function ai(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z&&n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(ti(n,e))return;t.uniform4fv(this.addr,e),ei(n,e)}}function oi(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ti(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),ei(n,e)}else{if(ti(n,i))return;Kn.set(i),t.uniformMatrix2fv(this.addr,!1,Kn),ei(n,i)}}function li(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ti(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),ei(n,e)}else{if(ti(n,i))return;Qn.set(i),t.uniformMatrix3fv(this.addr,!1,Qn),ei(n,i)}}function ci(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ti(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),ei(n,e)}else{if(ti(n,i))return;Jn.set(i),t.uniformMatrix4fv(this.addr,!1,Jn),ei(n,i)}}function hi(t,e){const n=this.cache;n[0]!==e&&(t.uniform1i(this.addr,e),n[0]=e)}function ui(t,e){const n=this.cache;ti(n,e)||(t.uniform2iv(this.addr,e),ei(n,e))}function di(t,e){const n=this.cache;ti(n,e)||(t.uniform3iv(this.addr,e),ei(n,e))}function pi(t,e){const n=this.cache;ti(n,e)||(t.uniform4iv(this.addr,e),ei(n,e))}function mi(t,e){const n=this.cache;n[0]!==e&&(t.uniform1ui(this.addr,e),n[0]=e)}function fi(t,e){const n=this.cache;ti(n,e)||(t.uniform2uiv(this.addr,e),ei(n,e))}function gi(t,e){const n=this.cache;ti(n,e)||(t.uniform3uiv(this.addr,e),ei(n,e))}function vi(t,e){const n=this.cache;ti(n,e)||(t.uniform4uiv(this.addr,e),ei(n,e))}function yi(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTexture2D(e||Wn,r)}function xi(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.setTexture3D(e||qn,r)}function _i(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTextureCube(e||Xn,r)}function wi(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2DArray(e||jn,r)}function Mi(t,e){t.uniform1fv(this.addr,e)}function bi(t,e){const n=$n(e,this.size,2);t.uniform2fv(this.addr,n)}function Si(t,e){const n=$n(e,this.size,3);t.uniform3fv(this.addr,n)}function Ti(t,e){const n=$n(e,this.size,4);t.uniform4fv(this.addr,n)}function Ei(t,e){const n=$n(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function Ai(t,e){const n=$n(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function Li(t,e){const n=$n(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function Ci(t,e){t.uniform1iv(this.addr,e)}function Ri(t,e){t.uniform2iv(this.addr,e)}function Pi(t,e){t.uniform3iv(this.addr,e)}function Di(t,e){t.uniform4iv(this.addr,e)}function Ii(t,e){t.uniform1uiv(this.addr,e)}function Ni(t,e){t.uniform2uiv(this.addr,e)}function zi(t,e){t.uniform3uiv(this.addr,e)}function Fi(t,e){t.uniform4uiv(this.addr,e)}function Oi(t,e,n){const i=e.length,r=ni(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||Wn,r[t])}function Bi(t,e,n){const i=e.length,r=ni(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||Xn,r[t])}function Ui(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return ii;case 35664:return ri;case 35665:return si;case 35666:return ai;case 35674:return oi;case 35675:return li;case 35676:return ci;case 5124:case 35670:return hi;case 35667:case 35671:return ui;case 35668:case 35672:return di;case 35669:case 35673:return pi;case 5125:return mi;case 36294:return fi;case 36295:return gi;case 36296:return vi;case 35678:case 36198:case 36298:case 36306:case 35682:return yi;case 35679:case 36299:case 36307:return xi;case 35680:case 36300:case 36308:case 36293:return _i;case 36289:case 36303:case 36311:case 36292:return wi}}(e.type)}function Hi(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return Mi;case 35664:return bi;case 35665:return Si;case 35666:return Ti;case 35674:return Ei;case 35675:return Ai;case 35676:return Li;case 5124:case 35670:return Ci;case 35667:case 35671:return Ri;case 35668:case 35672:return Pi;case 35669:case 35673:return Di;case 5125:return Ii;case 36294:return Ni;case 36295:return zi;case 36296:return Fi;case 35678:case 36198:case 36298:case 36306:case 35682:return Oi;case 35680:case 36300:case 36308:case 36293:return Bi}}(e.type)}function Gi(t){this.id=t,this.seq=[],this.map={}}Hi.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array&&e.length!==t.length&&(this.cache=new Float32Array(t.length)),ei(e,t)},Gi.prototype.setValue=function(t,e,n){const i=this.seq;for(let r=0,s=i.length;r!==s;++r){const s=i[r];s.setValue(t,e[s.id],n)}};const ki=/(\\w+)(\\])?(\\[|\\.)?/g;function Vi(t,e){t.seq.push(e),t.map[e.id]=e}function Wi(t,e,n){const i=t.name,r=i.length;for(ki.lastIndex=0;;){const s=ki.exec(i),a=ki.lastIndex;let o=s[1];const l=\"]\"===s[2],c=s[3];if(l&&(o|=0),void 0===c||\"[\"===c&&a+2===r){Vi(n,void 0===c?new Ui(o,t,e):new Hi(o,t,e));break}{let t=n.map[o];void 0===t&&(t=new Gi(o),Vi(n,t)),n=t}}}function ji(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,35718);for(let i=0;i<n;++i){const n=t.getActiveUniform(e,i);Wi(n,t.getUniformLocation(e,n.name),this)}}function qi(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}ji.prototype.setValue=function(t,e,n,i){const r=this.map[e];void 0!==r&&r.setValue(t,n,i)},ji.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i&&this.setValue(t,n,i)},ji.upload=function(t,e,n,i){for(let r=0,s=e.length;r!==s;++r){const s=e[r],a=n[s.id];!1!==a.needsUpdate&&s.setValue(t,a.value,i)}},ji.seqWithValue=function(t,e){const n=[];for(let i=0,r=t.length;i!==r;++i){const r=t[i];r.id in e&&n.push(r)}return n};let Xi=0;function Yi(t){switch(t){case L:return[\"Linear\",\"( value )\"];case 3001:return[\"sRGB\",\"( value )\"];case 3002:return[\"RGBE\",\"( value )\"];case 3004:return[\"RGBM\",\"( value, 7.0 )\"];case 3005:return[\"RGBM\",\"( value, 16.0 )\"];case 3006:return[\"RGBD\",\"( value, 256.0 )\"];case 3007:return[\"Gamma\",\"( value, float( GAMMA_FACTOR ) )\"];case 3003:return[\"LogLuv\",\"( value )\"];default:return console.warn(\"THREE.WebGLProgram: Unsupported encoding:\",t),[\"Linear\",\"( value )\"]}}function Zi(t,e,n){const i=t.getShaderParameter(e,35713),r=t.getShaderInfoLog(e).trim();if(i&&\"\"===r)return\"\";return\"THREE.WebGLShader: gl.getShaderInfoLog() \"+n+\"\\n\"+r+function(t){const e=t.split(\"\\n\");for(let t=0;t<e.length;t++)e[t]=t+1+\": \"+e[t];return e.join(\"\\n\")}(t.getShaderSource(e))}function Ji(t,e){const n=Yi(e);return\"vec4 \"+t+\"( vec4 value ) { return \"+n[0]+\"ToLinear\"+n[1]+\"; }\"}function Qi(t,e){const n=Yi(e);return\"vec4 \"+t+\"( vec4 value ) { return LinearTo\"+n[0]+n[1]+\"; }\"}function Ki(t,e){let n;switch(e){case 1:n=\"Linear\";break;case 2:n=\"Reinhard\";break;case 3:n=\"OptimizedCineon\";break;case 4:n=\"ACESFilmic\";break;case 5:n=\"Custom\";break;default:console.warn(\"THREE.WebGLProgram: Unsupported toneMapping:\",e),n=\"Linear\"}return\"vec3 \"+t+\"( vec3 color ) { return \"+n+\"ToneMapping( color ); }\"}function $i(t){return\"\"!==t}function tr(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function er(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const nr=/^[ \\t]*#include +<([\\w\\d./]+)>/gm;function ir(t){return t.replace(nr,rr)}function rr(t,e){const n=Tn[e];if(void 0===n)throw new Error(\"Can not resolve #include <\"+e+\">\");return ir(n)}const sr=/#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,ar=/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;function or(t){return t.replace(ar,cr).replace(sr,lr)}function lr(t,e,n,i){return console.warn(\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\"),cr(t,e,n,i)}function cr(t,e,n,i){let r=\"\";for(let t=parseInt(e);t<parseInt(n);t++)r+=i.replace(/\\[\\s*i\\s*\\]/g,\"[ \"+t+\" ]\").replace(/UNROLLED_LOOP_INDEX/g,t);return r}function hr(t){let e=\"precision \"+t.precision+\" float;\\nprecision \"+t.precision+\" int;\";return\"highp\"===t.precision?e+=\"\\n#define HIGH_PRECISION\":\"mediump\"===t.precision?e+=\"\\n#define MEDIUM_PRECISION\":\"lowp\"===t.precision&&(e+=\"\\n#define LOW_PRECISION\"),e}function ur(t,e,n,i){const r=t.getContext(),s=n.defines;let a=n.vertexShader,o=n.fragmentShader;const l=function(t){let e=\"SHADOWMAP_TYPE_BASIC\";return 1===t.shadowMapType?e=\"SHADOWMAP_TYPE_PCF\":2===t.shadowMapType?e=\"SHADOWMAP_TYPE_PCF_SOFT\":3===t.shadowMapType&&(e=\"SHADOWMAP_TYPE_VSM\"),e}(n),c=function(t){let e=\"ENVMAP_TYPE_CUBE\";if(t.envMap)switch(t.envMapMode){case 301:case 302:e=\"ENVMAP_TYPE_CUBE\";break;case 306:case 307:e=\"ENVMAP_TYPE_CUBE_UV\"}return e}(n),h=function(t){let e=\"ENVMAP_MODE_REFLECTION\";if(t.envMap)switch(t.envMapMode){case 302:case 307:e=\"ENVMAP_MODE_REFRACTION\"}return e}(n),u=function(t){let e=\"ENVMAP_BLENDING_NONE\";if(t.envMap)switch(t.combine){case 0:e=\"ENVMAP_BLENDING_MULTIPLY\";break;case 1:e=\"ENVMAP_BLENDING_MIX\";break;case 2:e=\"ENVMAP_BLENDING_ADD\"}return e}(n),d=t.gammaFactor>0?t.gammaFactor:1,p=n.isWebGL2?\"\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\"physical\"===t.shaderID?\"#extension GL_OES_standard_derivatives : enable\":\"\",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?\"#extension GL_EXT_frag_depth : enable\":\"\",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?\"#extension GL_EXT_draw_buffers : require\":\"\",(t.extensionShaderTextureLOD||t.envMap||t.transmission>0)&&t.rendererExtensionShaderTextureLod?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter($i).join(\"\\n\")}(n),m=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push(\"#define \"+n+\" \"+i)}return e.join(\"\\n\")}(s),f=r.createProgram();let g,v,y=n.glslVersion?\"#version \"+n.glslVersion+\"\\n\":\"\";n.isRawShaderMaterial?(g=[m].filter($i).join(\"\\n\"),g.length>0&&(g+=\"\\n\"),v=[p,m].filter($i).join(\"\\n\"),v.length>0&&(v+=\"\\n\")):(g=[hr(n),\"#define SHADER_NAME \"+n.shaderName,m,n.instancing?\"#define USE_INSTANCING\":\"\",n.instancingColor?\"#define USE_INSTANCING_COLOR\":\"\",n.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",\"#define GAMMA_FACTOR \"+d,\"#define MAX_BONES \"+n.maxBones,n.useFog&&n.fog?\"#define USE_FOG\":\"\",n.useFog&&n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+h:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap&&n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap&&n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.displacementMap&&n.supportsVertexTextures?\"#define USE_DISPLACEMENTMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.skinning?\"#define USE_SKINNING\":\"\",n.useVertexTexture?\"#define BONE_TEXTURE\":\"\",n.morphTargets?\"#define USE_MORPHTARGETS\":\"\",n.morphNormals&&!1===n.flatShading?\"#define USE_MORPHNORMALS\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",\"#ifdef USE_INSTANCING\",\"\\tattribute mat4 instanceMatrix;\",\"#endif\",\"#ifdef USE_INSTANCING_COLOR\",\"\\tattribute vec3 instanceColor;\",\"#endif\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_TANGENT\",\"\\tattribute vec4 tangent;\",\"#endif\",\"#if defined( USE_COLOR_ALPHA )\",\"\\tattribute vec4 color;\",\"#elif defined( USE_COLOR )\",\"\\tattribute vec3 color;\",\"#endif\",\"#ifdef USE_MORPHTARGETS\",\"\\tattribute vec3 morphTarget0;\",\"\\tattribute vec3 morphTarget1;\",\"\\tattribute vec3 morphTarget2;\",\"\\tattribute vec3 morphTarget3;\",\"\\t#ifdef USE_MORPHNORMALS\",\"\\t\\tattribute vec3 morphNormal0;\",\"\\t\\tattribute vec3 morphNormal1;\",\"\\t\\tattribute vec3 morphNormal2;\",\"\\t\\tattribute vec3 morphNormal3;\",\"\\t#else\",\"\\t\\tattribute vec3 morphTarget4;\",\"\\t\\tattribute vec3 morphTarget5;\",\"\\t\\tattribute vec3 morphTarget6;\",\"\\t\\tattribute vec3 morphTarget7;\",\"\\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\\tattribute vec4 skinIndex;\",\"\\tattribute vec4 skinWeight;\",\"#endif\",\"\\n\"].filter($i).join(\"\\n\"),v=[p,hr(n),\"#define SHADER_NAME \"+n.shaderName,m,n.alphaTest?\"#define ALPHATEST \"+n.alphaTest+(n.alphaTest%1?\"\":\".0\"):\"\",\"#define GAMMA_FACTOR \"+d,n.useFog&&n.fog?\"#define USE_FOG\":\"\",n.useFog&&n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.matcap?\"#define USE_MATCAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+c:\"\",n.envMap?\"#define \"+h:\"\",n.envMap?\"#define \"+u:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap&&n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap&&n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.sheen?\"#define USE_SHEEN\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors||n.instancingColor?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.gradientMap?\"#define USE_GRADIENTMAP\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",n.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?\"#define TEXTURE_LOD_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",0!==n.toneMapping?\"#define TONE_MAPPING\":\"\",0!==n.toneMapping?Tn.tonemapping_pars_fragment:\"\",0!==n.toneMapping?Ki(\"toneMapping\",n.toneMapping):\"\",n.dithering?\"#define DITHERING\":\"\",Tn.encodings_pars_fragment,n.map?Ji(\"mapTexelToLinear\",n.mapEncoding):\"\",n.matcap?Ji(\"matcapTexelToLinear\",n.matcapEncoding):\"\",n.envMap?Ji(\"envMapTexelToLinear\",n.envMapEncoding):\"\",n.emissiveMap?Ji(\"emissiveMapTexelToLinear\",n.emissiveMapEncoding):\"\",n.lightMap?Ji(\"lightMapTexelToLinear\",n.lightMapEncoding):\"\",Qi(\"linearToOutputTexel\",n.outputEncoding),n.depthPacking?\"#define DEPTH_PACKING \"+n.depthPacking:\"\",\"\\n\"].filter($i).join(\"\\n\")),a=ir(a),a=tr(a,n),a=er(a,n),o=ir(o),o=tr(o,n),o=er(o,n),a=or(a),o=or(o),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y=\"#version 300 es\\n\",g=[\"#define attribute in\",\"#define varying out\",\"#define texture2D texture\"].join(\"\\n\")+\"\\n\"+g,v=[\"#define varying in\",n.glslVersion===D?\"\":\"out highp vec4 pc_fragColor;\",n.glslVersion===D?\"\":\"#define gl_FragColor pc_fragColor\",\"#define gl_FragDepthEXT gl_FragDepth\",\"#define texture2D texture\",\"#define textureCube texture\",\"#define texture2DProj textureProj\",\"#define texture2DLodEXT textureLod\",\"#define texture2DProjLodEXT textureProjLod\",\"#define textureCubeLodEXT textureLod\",\"#define texture2DGradEXT textureGrad\",\"#define texture2DProjGradEXT textureProjGrad\",\"#define textureCubeGradEXT textureGrad\"].join(\"\\n\")+\"\\n\"+v);const x=y+v+o,_=qi(r,35633,y+g+a),w=qi(r,35632,x);if(r.attachShader(f,_),r.attachShader(f,w),void 0!==n.index0AttributeName?r.bindAttribLocation(f,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(f,0,\"position\"),r.linkProgram(f),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(f).trim(),e=r.getShaderInfoLog(_).trim(),n=r.getShaderInfoLog(w).trim();let i=!0,s=!0;if(!1===r.getProgramParameter(f,35714)){i=!1;const e=Zi(r,_,\"vertex\"),n=Zi(r,w,\"fragment\");console.error(\"THREE.WebGLProgram: shader error: \",r.getError(),\"35715\",r.getProgramParameter(f,35715),\"gl.getProgramInfoLog\",t,e,n)}else\"\"!==t?console.warn(\"THREE.WebGLProgram: gl.getProgramInfoLog()\",t):\"\"!==e&&\"\"!==n||(s=!1);s&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let M,b;return r.deleteShader(_),r.deleteShader(w),this.getUniforms=function(){return void 0===M&&(M=new ji(r,f)),M},this.getAttributes=function(){return void 0===b&&(b=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r<i;r++){const i=t.getActiveAttrib(e,r).name;n[i]=t.getAttribLocation(e,i)}return n}(r,f)),b},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(f),this.program=void 0},this.name=n.shaderName,this.id=Xi++,this.cacheKey=e,this.usedTimes=1,this.program=f,this.vertexShader=_,this.fragmentShader=w,this}function dr(t,e,n,i,r,s){const a=[],o=i.isWebGL2,l=i.logarithmicDepthBuffer,c=i.floatVertexTextures,h=i.maxVertexUniforms,u=i.vertexTextures;let d=i.precision;const p={MeshDepthMaterial:\"depth\",MeshDistanceMaterial:\"distanceRGBA\",MeshNormalMaterial:\"normal\",MeshBasicMaterial:\"basic\",MeshLambertMaterial:\"lambert\",MeshPhongMaterial:\"phong\",MeshToonMaterial:\"toon\",MeshStandardMaterial:\"physical\",MeshPhysicalMaterial:\"physical\",MeshMatcapMaterial:\"matcap\",LineBasicMaterial:\"basic\",LineDashedMaterial:\"dashed\",PointsMaterial:\"points\",ShadowMaterial:\"shadow\",SpriteMaterial:\"sprite\"},m=[\"precision\",\"isWebGL2\",\"supportsVertexTextures\",\"outputEncoding\",\"instancing\",\"instancingColor\",\"map\",\"mapEncoding\",\"matcap\",\"matcapEncoding\",\"envMap\",\"envMapMode\",\"envMapEncoding\",\"envMapCubeUV\",\"lightMap\",\"lightMapEncoding\",\"aoMap\",\"emissiveMap\",\"emissiveMapEncoding\",\"bumpMap\",\"normalMap\",\"objectSpaceNormalMap\",\"tangentSpaceNormalMap\",\"clearcoatMap\",\"clearcoatRoughnessMap\",\"clearcoatNormalMap\",\"displacementMap\",\"specularMap\",\"roughnessMap\",\"metalnessMap\",\"gradientMap\",\"alphaMap\",\"combine\",\"vertexColors\",\"vertexAlphas\",\"vertexTangents\",\"vertexUvs\",\"uvsVertexOnly\",\"fog\",\"useFog\",\"fogExp2\",\"flatShading\",\"sizeAttenuation\",\"logarithmicDepthBuffer\",\"skinning\",\"maxBones\",\"useVertexTexture\",\"morphTargets\",\"morphNormals\",\"premultipliedAlpha\",\"numDirLights\",\"numPointLights\",\"numSpotLights\",\"numHemiLights\",\"numRectAreaLights\",\"numDirLightShadows\",\"numPointLightShadows\",\"numSpotLightShadows\",\"shadowMapEnabled\",\"shadowMapType\",\"toneMapping\",\"physicallyCorrectLights\",\"alphaTest\",\"doubleSided\",\"flipSided\",\"numClippingPlanes\",\"numClipIntersection\",\"depthPacking\",\"dithering\",\"sheen\",\"transmission\",\"transmissionMap\",\"thicknessMap\"];function f(t){let e;return t&&t.isTexture?e=t.encoding:t&&t.isWebGLRenderTarget?(console.warn(\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\"),e=t.texture.encoding):e=L,e}return{getParameters:function(r,a,m,g,v){const y=g.fog,x=r.isMeshStandardMaterial?g.environment:null,_=e.get(r.envMap||x),w=p[r.type],M=v.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(c)return 1024;{const t=h,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i<e.length?(console.warn(\"THREE.WebGLRenderer: Skeleton has \"+e.length+\" bones. This GPU supports \"+i+\".\"),0):i}}(v):0;let b,S;if(null!==r.precision&&(d=i.getMaxPrecision(r.precision),d!==r.precision&&console.warn(\"THREE.WebGLProgram.getParameters:\",r.precision,\"not supported, using\",d,\"instead.\")),w){const t=An[w];b=t.vertexShader,S=t.fragmentShader}else b=r.vertexShader,S=r.fragmentShader;const T=t.getRenderTarget();return{isWebGL2:o,shaderID:w,shaderName:r.type,vertexShader:b,fragmentShader:S,defines:r.defines,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:d,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:u,outputEncoding:null!==T?f(T.texture):t.outputEncoding,map:!!r.map,mapEncoding:f(r.map),matcap:!!r.matcap,matcapEncoding:f(r.matcap),envMap:!!_,envMapMode:_&&_.mapping,envMapEncoding:f(_),envMapCubeUV:!!_&&(306===_.mapping||307===_.mapping),lightMap:!!r.lightMap,lightMapEncoding:f(r.lightMap),aoMap:!!r.aoMap,emissiveMap:!!r.emissiveMap,emissiveMapEncoding:f(r.emissiveMap),bumpMap:!!r.bumpMap,normalMap:!!r.normalMap,objectSpaceNormalMap:1===r.normalMapType,tangentSpaceNormalMap:0===r.normalMapType,clearcoatMap:!!r.clearcoatMap,clearcoatRoughnessMap:!!r.clearcoatRoughnessMap,clearcoatNormalMap:!!r.clearcoatNormalMap,displacementMap:!!r.displacementMap,roughnessMap:!!r.roughnessMap,metalnessMap:!!r.metalnessMap,specularMap:!!r.specularMap,alphaMap:!!r.alphaMap,gradientMap:!!r.gradientMap,sheen:!!r.sheen,transmission:!!r.transmission,transmissionMap:!!r.transmissionMap,thicknessMap:!!r.thicknessMap,combine:r.combine,vertexTangents:r.normalMap&&r.vertexTangents,vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors&&v.geometry&&v.geometry.attributes.color&&4===v.geometry.attributes.color.itemSize,vertexUvs:!!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatMap||r.clearcoatRoughnessMap||r.clearcoatNormalMap||r.displacementMap||r.transmissionMap||r.thicknessMap),uvsVertexOnly:!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatNormalMap||r.transmission||r.transmissionMap||r.thicknessMap||!r.displacementMap),fog:!!y,useFog:r.fog,fogExp2:y&&y.isFogExp2,flatShading:!!r.flatShading,sizeAttenuation:r.sizeAttenuation,logarithmicDepthBuffer:l,skinning:!0===v.isSkinnedMesh&&M>0,maxBones:M,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&m.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||n.has(\"EXT_frag_depth\"),rendererExtensionDrawBuffers:o||n.has(\"WEBGL_draw_buffers\"),rendererExtensionShaderTextureLod:o||n.has(\"EXT_shader_texture_lod\"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t<m.length;t++)n.push(e[m[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=p[t.type];let n;if(e){const t=An[e];n=on.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t<e;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i&&(i=new ur(t,n,e,r),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function pr(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n&&(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function mr(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function fr(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function gr(t){const e=[];let n=0;const i=[],r=[],s=[],a={id:-1};function o(i,r,s,o,l,c){let h=e[n];const u=t.get(s);return void 0===h?(h={id:i.id,object:i,geometry:r,material:s,program:u.program||a,groupOrder:o,renderOrder:i.renderOrder,z:l,group:c},e[n]=h):(h.id=i.id,h.object=i,h.geometry=r,h.material=s,h.program=u.program||a,h.groupOrder=o,h.renderOrder=i.renderOrder,h.z=l,h.group=c),n++,h}return{opaque:i,transmissive:r,transparent:s,init:function(){n=0,i.length=0,r.length=0,s.length=0},push:function(t,e,n,a,l,c){const h=o(t,e,n,a,l,c);n.transmission>0?r.push(h):!0===n.transparent?s.push(h):i.push(h)},unshift:function(t,e,n,a,l,c){const h=o(t,e,n,a,l,c);n.transmission>0?r.unshift(h):!0===n.transparent?s.unshift(h):i.unshift(h)},finish:function(){for(let t=n,i=e.length;t<i;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length>1&&i.sort(t||mr),r.length>1&&r.sort(e||fr),s.length>1&&s.sort(e||fr)}}}function vr(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new gr(t),e.set(n,[r])):i>=e.get(n).length?(r=new gr(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function yr(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":n={direction:new $,color:new we};break;case\"SpotLight\":n={position:new $,direction:new $,color:new we,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\"PointLight\":n={position:new $,color:new we,distance:0,decay:0};break;case\"HemisphereLight\":n={direction:new $,skyColor:new we,groundColor:new we};break;case\"RectAreaLight\":n={color:new we,position:new $,halfWidth:new $,halfHeight:new $}}return t[e.id]=n,n}}}let xr=0;function _r(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function wr(t,e){const n=new yr,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":case\"SpotLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new k};break;case\"PointLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new k,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new $);const s=new $,a=new Rt,o=new Rt;return{setup:function(s){let a=0,o=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,m=0,f=0,g=0;s.sort(_r);for(let t=0,e=s.length;t<e;t++){const e=s[t],v=e.color,y=e.intensity,x=e.distance,_=e.shadow&&e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=v.r*y,o+=v.g*y,l+=v.b*y;else if(e.isLightProbe)for(let t=0;t<9;t++)r.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.directionalShadow[c]=n,r.directionalShadowMap[c]=_,r.directionalShadowMatrix[c]=e.shadow.matrix,m++}r.directional[c]=t,c++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(v).multiplyScalar(y),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.spotShadow[u]=n,r.spotShadowMap[u]=_,r.spotShadowMatrix[u]=e.shadow.matrix,g++}r.spot[u]=t,u++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(v).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),r.rectArea[d]=t,d++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,r.pointShadow[h]=n,r.pointShadowMap[h]=_,r.pointShadowMatrix[h]=e.shadow.matrix,f++}r.point[h]=t,h++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y),t.groundColor.copy(e.groundColor).multiplyScalar(y),r.hemi[p]=t,p++}}d>0&&(e.isWebGL2||!0===t.has(\"OES_texture_float_linear\")?(r.rectAreaLTC1=En.LTC_FLOAT_1,r.rectAreaLTC2=En.LTC_FLOAT_2):!0===t.has(\"OES_texture_half_float_linear\")?(r.rectAreaLTC1=En.LTC_HALF_1,r.rectAreaLTC2=En.LTC_HALF_2):console.error(\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\")),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===m&&v.numPointShadows===f&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=f,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=m,v.numPointShadows=f,v.numSpotShadows=g,r.version=xr++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e<d;e++){const d=t[e];if(d.isDirectionalLight){const t=r.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(u),n++}else if(d.isSpotLight){const t=r.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(u),l++}else if(d.isRectAreaLight){const t=r.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),o.identity(),a.copy(d.matrixWorld),a.premultiply(u),o.extractRotation(a),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(o),t.halfHeight.applyMatrix4(o),c++}else if(d.isPointLight){const t=r.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),i++}else if(d.isHemisphereLight){const t=r.hemi[h];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(u),t.direction.normalize(),h++}}},state:r}}function Mr(t,e){const n=new wr(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(){n.setup(i)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function br(t,e){let n=new WeakMap;return{get:function(i,r=0){let s;return!1===n.has(i)?(s=new Mr(t,e),n.set(i,[s])):r>=n.get(i).length?(s=new Mr(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Sr extends me{constructor(t){super(),this.type=\"MeshDepthMaterial\",this.depthPacking=3200,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Sr.prototype.isMeshDepthMaterial=!0;class Tr extends me{constructor(t){super(),this.type=\"MeshDistanceMaterial\",this.referencePosition=new $,this.nearDistance=1,this.farDistance=1e3,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Tr.prototype.isMeshDistanceMaterial=!0;function Er(t,e,n){let i=new wn;const r=new k,s=new k,a=new Z,c=[],h=[],u={},d=n.maxTextureSize,p={0:1,1:0,2:2},m=new ln({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new k},radius:{value:4}},vertexShader:\"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\",fragmentShader:\"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include <packing>\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\"}),f=m.clone();f.defines.HORIZONTAL_PASS=1;const g=new Oe;g.setAttribute(\"position\",new Te(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const y=new en(g,m),x=this;function _(n,i){const r=e.update(y);m.uniforms.shadow_pass.value=n.map.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,m,y,null),f.uniforms.shadow_pass.value=n.mapPass.texture,f.uniforms.resolution.value=n.mapSize,f.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,f,y,null)}function w(t){const e=t<<0;let n=c[e];return void 0===n&&(n=new Sr({depthPacking:3201,morphTargets:t}),c[e]=n),n}function M(t){const e=t<<0;let n=h[e];return void 0===n&&(n=new Tr({morphTargets:t}),h[e]=n),n}function b(e,n,i,r,s,a,o){let l=null,c=w,h=e.customDepthMaterial;if(!0===r.isPointLight&&(c=M,h=e.customDistanceMaterial),void 0===h){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0),l=c(t)}else l=h;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=u[t];void 0===n&&(n={},u[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===o?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:p[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=s,l.farDistance=a),l}function S(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;l<c;l++){const c=e[l],h=r[c.materialIndex];if(h&&h.visible){const e=b(n,i,h,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,c)}}}else if(r.visible){const e=b(n,i,r,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t<e;t++)S(l[t],r,s,a,o)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(e,n,c){if(!1===x.enabled)return;if(!1===x.autoUpdate&&!1===x.needsUpdate)return;if(0===e.length)return;const h=t.getRenderTarget(),u=t.getActiveCubeFace(),p=t.getActiveMipmapLevel(),m=t.state;m.setBlending(0),m.buffers.color.setClear(1,1,1,1),m.buffers.depth.setTest(!0),m.setScissorTest(!1);for(let h=0,u=e.length;h<u;h++){const u=e[h],p=u.shadow;if(void 0===p){console.warn(\"THREE.WebGLShadowMap:\",u,\"has no shadow.\");continue}if(!1===p.autoUpdate&&!1===p.needsUpdate)continue;r.copy(p.mapSize);const f=p.getFrameExtents();if(r.multiply(f),s.copy(p.mapSize),(r.x>d||r.y>d)&&(r.x>d&&(s.x=Math.floor(d/f.x),r.x=s.x*f.x,p.mapSize.x=s.x),r.y>d&&(s.y=Math.floor(d/f.y),r.y=s.y*f.y,p.mapSize.y=s.y)),null===p.map&&!p.isPointLightShadow&&3===this.type){const t={minFilter:l,magFilter:l,format:v};p.map=new J(r.x,r.y,t),p.map.texture.name=u.name+\".shadowMap\",p.mapPass=new J(r.x,r.y,t),p.camera.updateProjectionMatrix()}if(null===p.map){const t={minFilter:o,magFilter:o,format:v};p.map=new J(r.x,r.y,t),p.map.texture.name=u.name+\".shadowMap\",p.camera.updateProjectionMatrix()}t.setRenderTarget(p.map),t.clear();const g=p.getViewportCount();for(let t=0;t<g;t++){const e=p.getViewport(t);a.set(s.x*e.x,s.y*e.y,s.x*e.z,s.y*e.w),m.viewport(a),p.updateMatrices(u,t),i=p.getFrustum(),S(n,c,p.camera,u,this.type)}p.isPointLightShadow||3!==this.type||_(p,c),p.needsUpdate=!1}x.needsUpdate=!1,t.setRenderTarget(h,u,p)}}function Ar(t,e,n){const r=n.isWebGL2;const s=new function(){let e=!1;const n=new Z;let i=null;const r=new Z(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,a,o){!0===o&&(e*=a,i*=a,s*=a),n.set(e,i,s,a),!1===r.equals(n)&&(t.clearColor(e,i,s,a),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},a=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(t){t?B(2929):U(2929)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case 0:t.depthFunc(512);break;case 1:t.depthFunc(519);break;case 2:t.depthFunc(513);break;case 3:t.depthFunc(515);break;case 4:t.depthFunc(514);break;case 5:t.depthFunc(518);break;case 6:t.depthFunc(516);break;case 7:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e&&(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},o=new function(){let e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null;return{setTest:function(t){e||(t?B(2960):U(2960))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,a){i===e&&r===n&&s===a||(t.stencilFunc(e,n,a),i=e,r=n,s=a)},setOp:function(e,n,i){a===e&&o===n&&l===i||(t.stencilOp(e,n,i),a=e,o=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null}}};let l={},c=null,h={},u=null,d=!1,p=null,m=null,f=null,g=null,v=null,y=null,x=null,_=!1,w=null,M=null,b=null,S=null,T=null;const E=t.getParameter(35661);let A=!1,L=0;const C=t.getParameter(7938);-1!==C.indexOf(\"WebGL\")?(L=parseFloat(/^WebGL (\\d)/.exec(C)[1]),A=L>=1):-1!==C.indexOf(\"OpenGL ES\")&&(L=parseFloat(/^OpenGL ES (\\d)/.exec(C)[1]),A=L>=2);let R=null,P={};const D=t.getParameter(3088),I=t.getParameter(2978),N=(new Z).fromArray(D),z=(new Z).fromArray(I);function F(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;e<i;e++)t.texImage2D(n+e,0,6408,1,1,0,6408,5121,r);return s}const O={};function B(e){!0!==l[e]&&(t.enable(e),l[e]=!0)}function U(e){!1!==l[e]&&(t.disable(e),l[e]=!1)}O[3553]=F(3553,3553,1),O[34067]=F(34067,34069,6),s.setClear(0,0,0,1),a.setClear(1),o.setClear(0),B(2929),a.setFunc(3),V(!1),W(1),B(2884),k(0);const H={[i]:32774,101:32778,102:32779};if(r)H[103]=32775,H[104]=32776;else{const t=e.get(\"EXT_blend_minmax\");null!==t&&(H[103]=t.MIN_EXT,H[104]=t.MAX_EXT)}const G={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function k(e,n,r,s,a,o,l,c){if(0!==e){if(!1===d&&(B(3042),d=!0),5===e)a=a||n,o=o||r,l=l||s,n===m&&a===v||(t.blendEquationSeparate(H[n],H[a]),m=n,v=a),r===f&&s===g&&o===y&&l===x||(t.blendFuncSeparate(G[r],G[s],G[o],G[l]),f=r,g=s,y=o,x=l),p=e,_=null;else if(e!==p||c!==_){if(m===i&&v===i||(t.blendEquation(32774),m=i,v=i),c)switch(e){case 1:t.blendFuncSeparate(1,771,1,771);break;case 2:t.blendFunc(1,1);break;case 3:t.blendFuncSeparate(0,0,769,771);break;case 4:t.blendFuncSeparate(0,768,0,770);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}else switch(e){case 1:t.blendFuncSeparate(770,771,1,771);break;case 2:t.blendFunc(770,1);break;case 3:t.blendFunc(0,769);break;case 4:t.blendFunc(0,768);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}f=null,g=null,y=null,x=null,p=e,_=c}}else!0===d&&(U(3042),d=!1)}function V(e){w!==e&&(e?t.frontFace(2304):t.frontFace(2305),w=e)}function W(e){0!==e?(B(2884),e!==M&&(1===e?t.cullFace(1029):2===e?t.cullFace(1028):t.cullFace(1032))):U(2884),M=e}function j(e,n,i){e?(B(32823),S===n&&T===i||(t.polygonOffset(n,i),S=n,T=i)):U(32823)}function q(e){void 0===e&&(e=33984+E-1),R!==e&&(t.activeTexture(e),R=e)}return{buffers:{color:s,depth:a,stencil:o},enable:B,disable:U,bindFramebuffer:function(e,n){return null===n&&null!==c&&(n=c),h[e]!==n&&(t.bindFramebuffer(e,n),h[e]=n,r&&(36009===e&&(h[36160]=n),36160===e&&(h[36009]=n)),!0)},bindXRFramebuffer:function(e){e!==c&&(t.bindFramebuffer(36160,e),c=e)},useProgram:function(e){return u!==e&&(t.useProgram(e),u=e,!0)},setBlending:k,setMaterial:function(t,e){2===t.side?U(2884):B(2884);let n=1===t.side;e&&(n=!n),V(n),1===t.blending&&!1===t.transparent?k(0):k(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha),a.setFunc(t.depthFunc),a.setTest(t.depthTest),a.setMask(t.depthWrite),s.setMask(t.colorWrite);const i=t.stencilWrite;o.setTest(i),i&&(o.setMask(t.stencilWriteMask),o.setFunc(t.stencilFunc,t.stencilRef,t.stencilFuncMask),o.setOp(t.stencilFail,t.stencilZFail,t.stencilZPass)),j(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits),!0===t.alphaToCoverage?B(32926):U(32926)},setFlipSided:V,setCullFace:W,setLineWidth:function(e){e!==b&&(A&&t.lineWidth(e),b=e)},setPolygonOffset:j,setScissorTest:function(t){t?B(3089):U(3089)},activeTexture:q,bindTexture:function(e,n){null===R&&q();let i=P[R];void 0===i&&(i={type:void 0,texture:void 0},P[R]=i),i.type===e&&i.texture===n||(t.bindTexture(e,n||O[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=P[R];void 0!==e&&void 0!==e.type&&(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},scissor:function(e){!1===N.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),N.copy(e))},viewport:function(e){!1===z.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),z.copy(e))},reset:function(){t.disable(3042),t.disable(2884),t.disable(2929),t.disable(32823),t.disable(3089),t.disable(2960),t.disable(32926),t.blendEquation(32774),t.blendFunc(1,0),t.blendFuncSeparate(1,0,1,0),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(513),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(519,0,4294967295),t.stencilOp(7680,7680,7680),t.clearStencil(0),t.cullFace(1029),t.frontFace(2305),t.polygonOffset(0,0),t.activeTexture(33984),t.bindFramebuffer(36160,null),!0===r&&(t.bindFramebuffer(36009,null),t.bindFramebuffer(36008,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),l={},R=null,P={},c=null,h={},u=null,d=!1,p=null,m=null,f=null,g=null,v=null,y=null,x=null,_=!1,w=null,M=null,b=null,S=null,T=null,N.set(0,0,t.canvas.width,t.canvas.height),z.set(0,0,t.canvas.width,t.canvas.height),s.reset(),a.reset(),o.reset()}}}function Lr(t,e,n,i,h,x,w){const M=h.isWebGL2,b=h.maxTextures,S=h.maxCubemapSize,T=h.maxTextureSize,E=h.maxSamples,A=new WeakMap;let L,C=!1;try{C=\"undefined\"!=typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext(\"2d\")}catch(t){}function R(t,e){return C?new OffscreenCanvas(t,e):document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\")}function P(t,e,n,i){let r=1;if((t.width>i||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if(\"undefined\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?G:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===L&&(L=R(s,a));const o=n?R(s,a):L;o.width=s,o.height=a;return o.getContext(\"2d\").drawImage(t,0,0,s,a),console.warn(\"THREE.WebGLRenderer: Texture has been resized from (\"+t.width+\"x\"+t.height+\") to (\"+s+\"x\"+a+\").\"),o}return\"data\"in t&&console.warn(\"THREE.WebGLRenderer: Image in DataTexture is too big (\"+t.width+\"x\"+t.height+\").\"),t}return t}function D(t){return H(t.width)&&H(t.height)}function I(t,e){return t.generateMipmaps&&e&&t.minFilter!==o&&t.minFilter!==l}function N(e,n,r,s,a=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s,a))}function z(n,i,r){if(!1===M)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\"+n+\"'\")}let s=i;return 6403===i&&(5126===r&&(s=33326),5131===r&&(s=33325),5121===r&&(s=33321)),6407===i&&(5126===r&&(s=34837),5131===r&&(s=34843),5121===r&&(s=32849)),6408===i&&(5126===r&&(s=34836),5131===r&&(s=34842),5121===r&&(s=32856)),33325!==s&&33326!==s&&34842!==s&&34836!==s||e.get(\"EXT_color_buffer_float\"),s}function F(t){return t===o||1004===t||1005===t?9728:9729}function O(e){const n=e.target;n.removeEventListener(\"dispose\",O),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&A.delete(n),w.memory.textures--}function B(e){const n=e.target;n.removeEventListener(\"dispose\",B),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),w.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e<r;e++){const r=i.get(n[e]);r.__webglTexture&&(t.deleteTexture(r.__webglTexture),w.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let U=0;function k(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=w.render.frame;A.get(t)!==e&&(A.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is undefined\");else{if(!1!==n.complete)return void Y(r,t,e);console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function V(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;X(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),a=i.image[0]&&i.image[0].isDataTexture,o=[];for(let t=0;t<6;t++)o[t]=s||a?a?i.image[t].image:i.image[t]:P(i.image[t],!1,!0,S);const l=o[0],c=D(l)||M,h=x.convert(i.format),u=x.convert(i.type),d=z(i.internalFormat,h,u);let p;if(q(34067,i,c),s){for(let t=0;t<6;t++){p=o[t].mipmaps;for(let e=0;e<p.length;e++){const r=p[e];i.format!==v&&i.format!==g?null!==h?n.compressedTexImage2D(34069+t,e,d,r.width,r.height,0,r.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):n.texImage2D(34069+t,e,d,r.width,r.height,0,h,u,r.data)}}e.__maxMipLevel=p.length-1}else{p=i.mipmaps;for(let t=0;t<6;t++)if(a){n.texImage2D(34069+t,0,d,o[t].width,o[t].height,0,h,u,o[t].data);for(let e=0;e<p.length;e++){const i=p[e].image[t].image;n.texImage2D(34069+t,e+1,d,i.width,i.height,0,h,u,i.data)}}else{n.texImage2D(34069+t,0,d,h,u,o[t]);for(let e=0;e<p.length;e++){const i=p[e];n.texImage2D(34069+t,e+1,d,h,u,i.image[t])}}e.__maxMipLevel=p.length}I(i,c)&&N(34067,i,l.width,l.height);e.__version=i.version,i.onUpdate&&i.onUpdate(i)}(s,e,r):(n.activeTexture(33984+r),n.bindTexture(34067,s.__webglTexture))}const W={[r]:10497,[s]:33071,[a]:33648},j={[o]:9728,1004:9984,1005:9986,[l]:9729,1007:9985,[c]:9987};function q(n,r,a){if(a?(t.texParameteri(n,10242,W[r.wrapS]),t.texParameteri(n,10243,W[r.wrapT]),32879!==n&&35866!==n||t.texParameteri(n,32882,W[r.wrapR]),t.texParameteri(n,10240,j[r.magFilter]),t.texParameteri(n,10241,j[r.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),r.wrapS===s&&r.wrapT===s||console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\"),t.texParameteri(n,10240,F(r.magFilter)),t.texParameteri(n,10241,F(r.minFilter)),r.minFilter!==o&&r.minFilter!==l&&console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\")),!0===e.has(\"EXT_texture_filter_anisotropic\")){const s=e.get(\"EXT_texture_filter_anisotropic\");if(r.type===p&&!1===e.has(\"OES_texture_float_linear\"))return;if(!1===M&&r.type===m&&!1===e.has(\"OES_texture_half_float_linear\"))return;(r.anisotropy>1||i.get(r).__currentAnisotropy)&&(t.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(r.anisotropy,h.getMaxAnisotropy())),i.get(r).__currentAnisotropy=r.anisotropy)}}function X(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener(\"dispose\",O),e.__webglTexture=t.createTexture(),w.memory.textures++)}function Y(e,i,r){let a=3553;i.isDataTexture2DArray&&(a=35866),i.isDataTexture3D&&(a=32879),X(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const c=function(t){return!M&&(t.wrapS!==s||t.wrapT!==s||t.minFilter!==o&&t.minFilter!==l)}(i)&&!1===D(i.image),h=P(i.image,c,!1,T),m=D(h)||M,w=x.convert(i.format);let b,S=x.convert(i.type),E=z(i.internalFormat,w,S);q(a,i,m);const A=i.mipmaps;if(i.isDepthTexture)E=6402,M?E=i.type===p?36012:i.type===d?33190:i.type===f?35056:33189:i.type===p&&console.error(\"WebGLRenderer: Floating point depth texture requires WebGL2.\"),i.format===y&&6402===E&&i.type!==u&&i.type!==d&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),i.type=u,S=x.convert(i.type)),i.format===_&&6402===E&&(E=34041,i.type!==f&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),i.type=f,S=x.convert(i.type))),n.texImage2D(3553,0,E,h.width,h.height,0,w,S,null);else if(i.isDataTexture)if(A.length>0&&m){for(let t=0,e=A.length;t<e;t++)b=A[t],n.texImage2D(3553,t,E,b.width,b.height,0,w,S,b.data);i.generateMipmaps=!1,e.__maxMipLevel=A.length-1}else n.texImage2D(3553,0,E,h.width,h.height,0,w,S,h.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let t=0,e=A.length;t<e;t++)b=A[t],i.format!==v&&i.format!==g?null!==w?n.compressedTexImage2D(3553,t,E,b.width,b.height,0,b.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):n.texImage2D(3553,t,E,b.width,b.height,0,w,S,b.data);e.__maxMipLevel=A.length-1}else if(i.isDataTexture2DArray)n.texImage3D(35866,0,E,h.width,h.height,h.depth,0,w,S,h.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(32879,0,E,h.width,h.height,h.depth,0,w,S,h.data),e.__maxMipLevel=0;else if(A.length>0&&m){for(let t=0,e=A.length;t<e;t++)b=A[t],n.texImage2D(3553,t,E,w,S,b);i.generateMipmaps=!1,e.__maxMipLevel=A.length-1}else n.texImage2D(3553,0,E,w,S,h),e.__maxMipLevel=0;I(i,m)&&N(a,i,h.width,h.height),e.__version=i.version,i.onUpdate&&i.onUpdate(i)}function Z(e,r,s,a,o){const l=x.convert(s.format),c=x.convert(s.type),h=z(s.internalFormat,l,c);32879===o||35866===o?n.texImage3D(o,0,h,r.width,r.height,r.depth,0,l,c,null):n.texImage2D(o,0,h,r.width,r.height,0,l,c,null),n.bindFramebuffer(36160,e),t.framebufferTexture2D(36160,a,o,i.get(s).__webglTexture,0),n.bindFramebuffer(36160,null)}function J(e,n,i){if(t.bindRenderbuffer(36161,e),n.depthBuffer&&!n.stencilBuffer){let r=33189;if(i){const e=n.depthTexture;e&&e.isDepthTexture&&(e.type===p?r=36012:e.type===d&&(r=33190));const i=K(n);t.renderbufferStorageMultisample(36161,i,r,n.width,n.height)}else t.renderbufferStorage(36161,r,n.width,n.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(n.depthBuffer&&n.stencilBuffer){if(i){const e=K(n);t.renderbufferStorageMultisample(36161,e,35056,n.width,n.height)}else t.renderbufferStorage(36161,34041,n.width,n.height);t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,r=x.convert(e.format),s=x.convert(e.type),a=z(e.internalFormat,r,s);if(i){const e=K(n);t.renderbufferStorageMultisample(36161,e,a,n.width,n.height)}else t.renderbufferStorage(36161,a,n.width,n.height)}t.bindRenderbuffer(36161,null)}function Q(e){const r=i.get(e),s=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(s)throw new Error(\"target.depthTexture not supported in Cube render targets\");!function(e,r){if(r&&r.isWebGLCubeRenderTarget)throw new Error(\"Depth Texture with cube render targets is not supported\");if(n.bindFramebuffer(36160,e),!r.depthTexture||!r.depthTexture.isDepthTexture)throw new Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");i.get(r.depthTexture).__webglTexture&&r.depthTexture.image.width===r.width&&r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),k(r.depthTexture,0);const s=i.get(r.depthTexture).__webglTexture;if(r.depthTexture.format===y)t.framebufferTexture2D(36160,36096,3553,s,0);else{if(r.depthTexture.format!==_)throw new Error(\"Unknown depthTexture format\");t.framebufferTexture2D(36160,33306,3553,s,0)}}(r.__webglFramebuffer,e)}else if(s){r.__webglDepthbuffer=[];for(let i=0;i<6;i++)n.bindFramebuffer(36160,r.__webglFramebuffer[i]),r.__webglDepthbuffer[i]=t.createRenderbuffer(),J(r.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(36160,r.__webglFramebuffer),r.__webglDepthbuffer=t.createRenderbuffer(),J(r.__webglDepthbuffer,e,!1);n.bindFramebuffer(36160,null)}function K(t){return M&&t.isWebGLMultisampleRenderTarget?Math.min(E,t.samples):0}let $=!1,tt=!1;this.allocateTextureUnit=function(){const t=U;return t>=b&&console.warn(\"THREE.WebGLTextures: Trying to use \"+t+\" texture units while this GPU supports only \"+b),U+=1,t},this.resetTextureUnits=function(){U=0},this.setTexture2D=k,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?Y(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?Y(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=V,this.setupRenderTarget=function(e){const r=e.texture,s=i.get(e),a=i.get(r);e.addEventListener(\"dispose\",B),!0!==e.isWebGLMultipleRenderTargets&&(a.__webglTexture=t.createTexture(),a.__version=r.version,w.memory.textures++);const o=!0===e.isWebGLCubeRenderTarget,l=!0===e.isWebGLMultipleRenderTargets,c=!0===e.isWebGLMultisampleRenderTarget,u=r.isDataTexture3D||r.isDataTexture2DArray,d=D(e)||M;if(!M||r.format!==g||r.type!==p&&r.type!==m||(r.format=v,console.warn(\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\")),o){s.__webglFramebuffer=[];for(let e=0;e<6;e++)s.__webglFramebuffer[e]=t.createFramebuffer()}else if(s.__webglFramebuffer=t.createFramebuffer(),l)if(h.drawBuffers){const n=e.texture;for(let e=0,r=n.length;e<r;e++){const r=i.get(n[e]);void 0===r.__webglTexture&&(r.__webglTexture=t.createTexture(),w.memory.textures++)}}else console.warn(\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\");else if(c)if(M){s.__webglMultisampledFramebuffer=t.createFramebuffer(),s.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,s.__webglColorRenderbuffer);const i=x.convert(r.format),a=x.convert(r.type),o=z(r.internalFormat,i,a),l=K(e);t.renderbufferStorageMultisample(36161,l,o,e.width,e.height),n.bindFramebuffer(36160,s.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,s.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(s.__webglDepthRenderbuffer=t.createRenderbuffer(),J(s.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}else console.warn(\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\");if(o){n.bindTexture(34067,a.__webglTexture),q(34067,r,d);for(let t=0;t<6;t++)Z(s.__webglFramebuffer[t],e,r,36064,34069+t);I(r,d)&&N(34067,r,e.width,e.height),n.bindTexture(34067,null)}else if(l){const t=e.texture;for(let r=0,a=t.length;r<a;r++){const a=t[r],o=i.get(a);n.bindTexture(3553,o.__webglTexture),q(3553,a,d),Z(s.__webglFramebuffer,e,a,36064+r,3553),I(a,d)&&N(3553,a,e.width,e.height)}n.bindTexture(3553,null)}else{let t=3553;if(u)if(M){t=r.isDataTexture3D?32879:35866}else console.warn(\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\");n.bindTexture(t,a.__webglTexture),q(t,r,d),Z(s.__webglFramebuffer,e,r,36064,t),I(r,d)&&N(t,r,e.width,e.height,e.depth),n.bindTexture(t,null)}e.depthBuffer&&Q(e)},this.updateRenderTargetMipmap=function(t){const e=D(t)||M,r=!0===t.isWebGLMultipleRenderTargets?t.texture:[t.texture];for(let s=0,a=r.length;s<a;s++){const a=r[s];if(I(a,e)){const e=t.isWebGLCubeRenderTarget?34067:3553,r=i.get(a).__webglTexture;n.bindTexture(e,r),N(e,a,t.width,t.height),n.bindTexture(e,null)}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(M){const r=e.width,s=e.height;let a=16384;e.depthBuffer&&(a|=256),e.stencilBuffer&&(a|=1024);const o=i.get(e);n.bindFramebuffer(36008,o.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,o.__webglFramebuffer),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,o.__webglMultisampledFramebuffer)}else console.warn(\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===$&&(console.warn(\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\"),$=!0),t=t.texture),k(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===tt&&(console.warn(\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\"),tt=!0),t=t.texture),V(t,e)}}function Cr(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===h)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===u)return 5123;if(1013===t)return 5124;if(t===d)return 5125;if(t===p)return 5126;if(t===m)return i?5131:(n=e.get(\"OES_texture_half_float\"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(t===g)return 6407;if(t===v)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===y)return 6402;if(t===_)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get(\"WEBGL_compressed_texture_s3tc\"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get(\"WEBGL_compressed_texture_pvrtc\"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get(\"WEBGL_compressed_texture_etc1\"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get(\"WEBGL_compressed_texture_etc\"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get(\"WEBGL_compressed_texture_astc\"),null!==n?t:null):36492===t?(n=e.get(\"EXT_texture_compression_bptc\"),null!==n?t:null):t===f?i?34042:(n=e.get(\"WEBGL_depth_texture\"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class Rr extends hn{constructor(t=[]){super(),this.cameras=t}}Rr.prototype.isArrayCamera=!0;class Pr extends ee{constructor(){super(),this.type=\"Group\"}}Pr.prototype.isGroup=!0;const Dr={type:\"move\"};class Ir{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new Pr,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new Pr,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new $,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new $),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new Pr,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new $,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new $),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\"disconnected\",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t&&\"visible-blurred\"!==e.session.visibilityState)if(null!==a&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Dr))),l&&t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new Pr;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints[\"index-finger-tip\"],r=l.joints[\"thumb-tip\"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching&&a>o+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\"pinchend\",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:\"pinchstart\",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a&&(a.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class Nr extends I{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,a=null,o=\"local-floor\",l=null,c=null,h=null,u=null;const d=[],p=new Map,m=new hn;m.layers.enable(1),m.viewport=new Z;const f=new hn;f.layers.enable(2),f.viewport=new Z;const g=[m,f],v=new Rr;v.layers.enable(1),v.layers.enable(2);let y=null,x=null;function _(t){const e=p.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function w(){p.forEach((function(t,e){t.disconnect(e)})),p.clear(),y=null,x=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),A.stop(),n.isPresenting=!1,n.dispatchEvent({type:\"sessionend\"})}function M(t){const e=r.inputSources;for(let t=0;t<d.length;t++)p.set(e[t],d[t]);for(let e=0;e<t.removed.length;e++){const n=t.removed[e],i=p.get(n);i&&(i.dispatchEvent({type:\"disconnected\",data:n}),p.delete(n))}for(let e=0;e<t.added.length;e++){const n=t.added[e],i=p.get(n);i&&i.dispatchEvent({type:\"connected\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=d[t];return void 0===e&&(e=new Ir,d[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=d[t];return void 0===e&&(e=new Ir,d[t]=e),e.getGripSpace()},this.getHand=function(t){let e=d[t];return void 0===e&&(e=new Ir,d[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){s=t,!0===n.isPresenting&&console.warn(\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\")},this.setReferenceSpaceType=function(t){o=t,!0===n.isPresenting&&console.warn(\"THREE.WebXRManager: Cannot change reference space type while presenting.\")},this.getReferenceSpace=function(){return a},this.getSession=function(){return r},this.setSession=async function(t){if(r=t,null!==r){r.addEventListener(\"select\",_),r.addEventListener(\"selectstart\",_),r.addEventListener(\"selectend\",_),r.addEventListener(\"squeeze\",_),r.addEventListener(\"squeezestart\",_),r.addEventListener(\"squeezeend\",_),r.addEventListener(\"end\",w),r.addEventListener(\"inputsourceschange\",M);const t=e.getContextAttributes();if(!0!==t.xrCompatible&&await e.makeXRCompatible(),void 0===r.renderState.layers){const n={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s},i=new XRWebGLLayer(r,e,n);r.updateRenderState({baseLayer:i})}else{let n=0;t.depth&&(n=t.stencil?34041:6402);const i={colorFormat:t.alpha?6408:6407,depthFormat:n,scaleFactor:s};c=new XRWebGLBinding(r,e),u=c.createProjectionLayer(i),h=e.createFramebuffer(),r.updateRenderState({layers:[u]})}a=await r.requestReferenceSpace(o),A.setContext(r),A.start(),n.isPresenting=!0,n.dispatchEvent({type:\"sessionstart\"})}};const b=new $,S=new $;function T(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===r)return;v.near=f.near=m.near=t.near,v.far=f.far=m.far=t.far,y===v.near&&x===v.far||(r.updateRenderState({depthNear:v.near,depthFar:v.far}),y=v.near,x=v.far);const e=t.parent,n=v.cameras;T(v,e);for(let t=0;t<n.length;t++)T(n[t],e);v.matrixWorld.decompose(v.position,v.quaternion,v.scale),t.position.copy(v.position),t.quaternion.copy(v.quaternion),t.scale.copy(v.scale),t.matrix.copy(v.matrix),t.matrixWorld.copy(v.matrixWorld);const i=t.children;for(let t=0,e=i.length;t<e;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){b.setFromMatrixPosition(e.matrixWorld),S.setFromMatrixPosition(n.matrixWorld);const i=b.distanceTo(S),r=e.projectionMatrix.elements,s=n.projectionMatrix.elements,a=r[14]/(r[10]-1),o=r[14]/(r[10]+1),l=(r[9]+1)/r[5],c=(r[9]-1)/r[5],h=(r[8]-1)/r[0],u=(s[8]+1)/s[0],d=a*h,p=a*u,m=i/(-h+u),f=m*-h;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(f),t.translateZ(m),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const g=a+m,v=o+m,y=d-f,x=p+(i-f),_=l*o/v*g,w=c*o/v*g;t.projectionMatrix.makePerspective(y,x,_,w,g,v)}(v,m,f):v.projectionMatrix.copy(m.projectionMatrix)},this.getCamera=function(){return v};let E=null;const A=new Mn;A.setAnimationLoop((function(t,n){if(l=n.getViewerPose(a),null!==l){const t=l.views,n=r.renderState.baseLayer;void 0===r.renderState.layers&&i.bindXRFramebuffer(n.framebuffer);let s=!1;t.length!==v.cameras.length&&(v.cameras.length=0,s=!0);for(let a=0;a<t.length;a++){const o=t[a];let l=null;if(void 0===r.renderState.layers)l=n.getViewport(o);else{const t=c.getViewSubImage(u,o);i.bindXRFramebuffer(h),e.framebufferTexture2D(36160,36064,3553,t.colorTexture,0),void 0!==t.depthStencilTexture&&e.framebufferTexture2D(36160,36096,3553,t.depthStencilTexture,0),l=t.viewport}const d=g[a];d.matrix.fromArray(o.transform.matrix),d.projectionMatrix.fromArray(o.projectionMatrix),d.viewport.set(l.x,l.y,l.width,l.height),0===a&&v.matrix.copy(d.matrix),!0===s&&v.cameras.push(d)}}const s=r.inputSources;for(let t=0;t<d.length;t++){const e=d[t],i=s[t];e.update(i,n,a)}E&&E(t,n)})),this.setAnimationLoop=function(t){E=t},this.dispose=function(){}}}function zr(t){function e(e,n){e.opacity.value=n.opacity,n.color&&e.diffuse.value.copy(n.color),n.emissive&&e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(e.map.value=n.map),n.alphaMap&&(e.alphaMap.value=n.alphaMap),n.specularMap&&(e.specularMap.value=n.specularMap);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&i._needsFlipEnvMap?-1:1,e.reflectivity.value=n.reflectivity,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r&&(e.maxMipLevel.value=r)}let r,s;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap&&(r=n.clearcoatRoughnessMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?s=n.aoMap:n.lightMap&&(s=n.lightMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),e.uv2Transform.value.copy(s.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,1===n.side&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),1===n.side&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,a){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.reflectivity.value=e.reflectivity,t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.sheen&&t.sheen.value.copy(e.sheen);e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap);e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap);e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&t.clearcoatNormalScale.value.negate());t.transmission.value=e.transmission,e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap);e.transmission>0&&(t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height));t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap);t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor)}(t,i,a):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function Fr(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");return t.style.display=\"block\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,a=void 0===t.stencil||t.stencil,l=void 0!==t.antialias&&t.antialias,u=void 0===t.premultipliedAlpha||t.premultipliedAlpha,d=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,f=void 0!==t.powerPreference?t.powerPreference:\"default\",g=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let y=null,x=null;const _=[],w=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=L,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const M=this;let b=!1,S=0,T=0,E=null,A=-1,C=null;const R=new Z,P=new Z;let D=null,I=e.width,N=e.height,z=1,F=null,O=null;const B=new Z(0,0,I,N),U=new Z(0,0,I,N);let H=!1;const G=[],k=new wn;let V=!1,W=!1,j=null;const q=new Rt,X=new $,Y={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function K(){return null===E?z:1}let tt,et,nt,it,rt,st,at,ot,lt,ct,ht,ut,dt,pt,mt,ft,gt,vt,yt,xt,_t,wt,Mt=n;function bt(t,n){for(let i=0;i<t.length;i++){const r=t[i],s=e.getContext(r,n);if(null!==s)return s}return null}try{const t={alpha:i,depth:r,stencil:a,antialias:l,premultipliedAlpha:u,preserveDrawingBuffer:d,powerPreference:f,failIfMajorPerformanceCaveat:g};if(e.addEventListener(\"webglcontextlost\",Et,!1),e.addEventListener(\"webglcontextrestored\",At,!1),null===Mt){const e=[\"webgl2\",\"webgl\",\"experimental-webgl\"];if(!0===M.isWebGL1Renderer&&e.shift(),Mt=bt(e,t),null===Mt)throw bt(e)?new Error(\"Error creating WebGL context with your selected attributes.\"):new Error(\"Error creating WebGL context.\")}void 0===Mt.getShaderPrecisionFormat&&(Mt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\"THREE.WebGLRenderer: \"+t.message),t}function St(){tt=new Nn(Mt),et=new Pn(Mt,tt,t),tt.init(et),_t=new Cr(Mt,tt,et),nt=new Ar(Mt,tt,et),G[0]=1029,it=new On(Mt),rt=new pr,st=new Lr(Mt,tt,nt,rt,et,_t,it),at=new In(M),ot=new bn(Mt,et),wt=new Cn(Mt,tt,ot,et),lt=new zn(Mt,ot,it,wt),ct=new Gn(Mt,lt,ot,it),vt=new Hn(Mt),mt=new Dn(rt),ht=new dr(M,at,tt,et,wt,mt),ut=new zr(rt),dt=new vr(rt),pt=new br(tt,et),gt=new Ln(M,at,nt,ct,u),ft=new Er(M,ct,et),yt=new Rn(Mt,tt,it,et),xt=new Fn(Mt,tt,it,et),it.programs=ht.programs,M.capabilities=et,M.extensions=tt,M.properties=rt,M.renderLists=dt,M.shadowMap=ft,M.state=nt,M.info=it}St();const Tt=new Nr(M,Mt);function Et(t){t.preventDefault(),console.log(\"THREE.WebGLRenderer: Context Lost.\"),b=!0}function At(){console.log(\"THREE.WebGLRenderer: Context Restored.\"),b=!1;const t=it.autoReset,e=ft.enabled,n=ft.autoUpdate,i=ft.needsUpdate,r=ft.type;St(),it.autoReset=t,ft.enabled=e,ft.autoUpdate=n,ft.needsUpdate=i,ft.type=r}function Lt(t){const e=t.target;e.removeEventListener(\"dispose\",Lt),function(t){(function(t){const e=rt.get(t).programs;void 0!==e&&e.forEach((function(t){ht.releaseProgram(t)}))})(t),rt.remove(t)}(e)}this.xr=Tt,this.getContext=function(){return Mt},this.getContextAttributes=function(){return Mt.getContextAttributes()},this.forceContextLoss=function(){const t=tt.get(\"WEBGL_lose_context\");t&&t.loseContext()},this.forceContextRestore=function(){const t=tt.get(\"WEBGL_lose_context\");t&&t.restoreContext()},this.getPixelRatio=function(){return z},this.setPixelRatio=function(t){void 0!==t&&(z=t,this.setSize(I,N,!1))},this.getSize=function(t){return t.set(I,N)},this.setSize=function(t,n,i){Tt.isPresenting?console.warn(\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\"):(I=t,N=n,e.width=Math.floor(t*z),e.height=Math.floor(n*z),!1!==i&&(e.style.width=t+\"px\",e.style.height=n+\"px\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return t.set(I*z,N*z).floor()},this.setDrawingBufferSize=function(t,n,i){I=t,N=n,z=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return t.copy(R)},this.getViewport=function(t){return t.copy(B)},this.setViewport=function(t,e,n,i){t.isVector4?B.set(t.x,t.y,t.z,t.w):B.set(t,e,n,i),nt.viewport(R.copy(B).multiplyScalar(z).floor())},this.getScissor=function(t){return t.copy(U)},this.setScissor=function(t,e,n,i){t.isVector4?U.set(t.x,t.y,t.z,t.w):U.set(t,e,n,i),nt.scissor(P.copy(U).multiplyScalar(z).floor())},this.getScissorTest=function(){return H},this.setScissorTest=function(t){nt.setScissorTest(H=t)},this.setOpaqueSort=function(t){F=t},this.setTransparentSort=function(t){O=t},this.getClearColor=function(t){return t.copy(gt.getClearColor())},this.setClearColor=function(){gt.setClearColor.apply(gt,arguments)},this.getClearAlpha=function(){return gt.getClearAlpha()},this.setClearAlpha=function(){gt.setClearAlpha.apply(gt,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)&&(i|=16384),(void 0===e||e)&&(i|=256),(void 0===n||n)&&(i|=1024),Mt.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\"webglcontextlost\",Et,!1),e.removeEventListener(\"webglcontextrestored\",At,!1),dt.dispose(),pt.dispose(),rt.dispose(),at.dispose(),ct.dispose(),wt.dispose(),Tt.dispose(),Tt.removeEventListener(\"sessionstart\",Pt),Tt.removeEventListener(\"sessionend\",Dt),j&&(j.dispose(),j=null),It.stop()},this.renderBufferImmediate=function(t,e){wt.initAttributes();const n=rt.get(t);t.hasPositions&&!n.position&&(n.position=Mt.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=Mt.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=Mt.createBuffer()),t.hasColors&&!n.color&&(n.color=Mt.createBuffer());const i=e.getAttributes();t.hasPositions&&(Mt.bindBuffer(34962,n.position),Mt.bufferData(34962,t.positionArray,35048),wt.enableAttribute(i.position),Mt.vertexAttribPointer(i.position,3,5126,!1,0,0)),t.hasNormals&&(Mt.bindBuffer(34962,n.normal),Mt.bufferData(34962,t.normalArray,35048),wt.enableAttribute(i.normal),Mt.vertexAttribPointer(i.normal,3,5126,!1,0,0)),t.hasUvs&&(Mt.bindBuffer(34962,n.uv),Mt.bufferData(34962,t.uvArray,35048),wt.enableAttribute(i.uv),Mt.vertexAttribPointer(i.uv,2,5126,!1,0,0)),t.hasColors&&(Mt.bindBuffer(34962,n.color),Mt.bufferData(34962,t.colorArray,35048),wt.enableAttribute(i.color),Mt.vertexAttribPointer(i.color,3,5126,!1,0,0)),wt.disableUnusedAttributes(),Mt.drawArrays(4,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,r,s){null===e&&(e=Y);const a=r.isMesh&&r.matrixWorld.determinant()<0,o=Ut(t,e,i,r);nt.setMaterial(i,a);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let h,u=1;!0===i.wireframe&&(l=lt.getWireframeAttribute(n),u=2),(i.morphTargets||i.morphNormals)&&vt.update(r,n,i,o),wt.setup(r,i,o,n,l);let d=yt;null!==l&&(h=ot.get(l),d=xt,d.setIndex(h));const p=null!==l?l.count:c.count,m=n.drawRange.start*u,f=n.drawRange.count*u,g=null!==s?s.start*u:0,v=null!==s?s.count*u:1/0,y=Math.max(m,g),x=Math.min(p,m+f,g+v)-1,_=Math.max(0,x-y+1);if(0!==_){if(r.isMesh)!0===i.wireframe?(nt.setLineWidth(i.wireframeLinewidth*K()),d.setMode(1)):d.setMode(4);else if(r.isLine){let t=i.linewidth;void 0===t&&(t=1),nt.setLineWidth(t*K()),r.isLineSegments?d.setMode(1):r.isLineLoop?d.setMode(2):d.setMode(3)}else r.isPoints?d.setMode(0):r.isSprite&&d.setMode(4);if(r.isInstancedMesh)d.renderInstances(y,_,r.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(y,_,t)}else d.render(y,_)}},this.compile=function(t,e){x=pt.get(t),x.init(),t.traverseVisible((function(t){t.isLight&&t.layers.test(e.layers)&&(x.pushLight(t),t.castShadow&&x.pushShadow(t))})),x.setupLights(),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i<n.length;i++){Ot(n[i],t,e)}else Ot(n,t,e)}))};let Ct=null;function Pt(){It.stop()}function Dt(){It.start()}const It=new Mn;function Nt(t,e,n,i){if(!1===t.visible)return;if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(e);else if(t.isLight)x.pushLight(t),t.castShadow&&x.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||k.intersectsSprite(t)){i&&X.setFromMatrixPosition(t.matrixWorld).applyMatrix4(q);const e=ct.update(t),r=t.material;r.visible&&y.push(t,e,r,n,X.z,null)}}else if(t.isImmediateRenderObject)i&&X.setFromMatrixPosition(t.matrixWorld).applyMatrix4(q),y.push(t,null,t.material,n,X.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==it.render.frame&&(t.skeleton.update(),t.skeleton.frame=it.render.frame),!t.frustumCulled||k.intersectsObject(t))){i&&X.setFromMatrixPosition(t.matrixWorld).applyMatrix4(q);const e=ct.update(t),r=t.material;if(Array.isArray(r)){const i=e.groups;for(let s=0,a=i.length;s<a;s++){const a=i[s],o=r[a.materialIndex];o&&o.visible&&y.push(t,e,o,n,X.z,a)}}else r.visible&&y.push(t,e,r,n,X.z,null)}const r=t.children;for(let t=0,s=r.length;t<s;t++)Nt(r[t],e,n,i)}function zt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r<s;r++){const s=t[r],a=s.object,o=s.geometry,l=null===i?s.material:i,c=s.group;if(n.isArrayCamera){const t=n.cameras;for(let n=0,i=t.length;n<i;n++){const i=t[n];a.layers.test(i.layers)&&(nt.viewport(R.copy(i.viewport)),x.setupLightsView(i),Ft(a,e,i,o,l,c))}}else Ft(a,e,n,o,l,c)}}function Ft(t,e,n,i,r,s){if(t.onBeforeRender(M,e,n,i,r,s),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),t.isImmediateRenderObject){const i=Ut(n,e,r,t);nt.setMaterial(r),wt.reset(),function(t,e){t.render((function(t){M.renderBufferImmediate(t,e)}))}(t,i)}else!0===r.transparent&&2===r.side?(r.side=1,r.needsUpdate=!0,M.renderBufferDirect(n,e,i,r,t,s),r.side=0,r.needsUpdate=!0,M.renderBufferDirect(n,e,i,r,t,s),r.side=2):M.renderBufferDirect(n,e,i,r,t,s);t.onAfterRender(M,e,n,i,r,s)}function Ot(t,e,n){!0!==e.isScene&&(e=Y);const i=rt.get(t),r=x.state.lights,s=x.state.shadowsArray,a=r.state.version,o=ht.getParameters(t,r.state,s,e,n),l=ht.getProgramCacheKey(o);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=at.get(t.envMap||i.environment),void 0===c&&(t.addEventListener(\"dispose\",Lt),c=new Map,i.programs=c);let h=c.get(l);if(void 0!==h){if(i.currentProgram===h&&i.lightsStateVersion===a)return Bt(t,o),h}else o.uniforms=ht.getUniforms(t),t.onBuild(o,M),t.onBeforeCompile(o,M),h=ht.acquireProgram(o,l),c.set(l,h),i.uniforms=o.uniforms;const u=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(u.clippingPlanes=mt.uniform),Bt(t,o),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial&&!0===t.lights}(t),i.lightsStateVersion=a,i.needsLights&&(u.ambientLightColor.value=r.state.ambient,u.lightProbe.value=r.state.probe,u.directionalLights.value=r.state.directional,u.directionalLightShadows.value=r.state.directionalShadow,u.spotLights.value=r.state.spot,u.spotLightShadows.value=r.state.spotShadow,u.rectAreaLights.value=r.state.rectArea,u.ltc_1.value=r.state.rectAreaLTC1,u.ltc_2.value=r.state.rectAreaLTC2,u.pointLights.value=r.state.point,u.pointLightShadows.value=r.state.pointShadow,u.hemisphereLights.value=r.state.hemi,u.directionalShadowMap.value=r.state.directionalShadowMap,u.directionalShadowMatrix.value=r.state.directionalShadowMatrix,u.spotShadowMap.value=r.state.spotShadowMap,u.spotShadowMatrix.value=r.state.spotShadowMatrix,u.pointShadowMap.value=r.state.pointShadowMap,u.pointShadowMatrix.value=r.state.pointShadowMatrix);const d=h.getUniforms(),p=ji.seqWithValue(d.seq,u);return i.currentProgram=h,i.uniformsList=p,h}function Bt(t,e){const n=rt.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas}function Ut(t,e,n,i){!0!==e.isScene&&(e=Y),st.resetTextureUnits();const r=e.fog,s=n.isMeshStandardMaterial?e.environment:null,a=null===E?M.outputEncoding:E.texture.encoding,o=at.get(n.envMap||s),l=!0===n.vertexColors&&i.geometry&&i.geometry.attributes.color&&4===i.geometry.attributes.color.itemSize,c=rt.get(n),h=x.state.lights;if(!0===V&&(!0===W||t!==C)){const e=t===C&&n.id===A;mt.setState(n,t,e)}let u=!1;n.version===c.__version?c.needsLights&&c.lightsStateVersion!==h.state.version||c.outputEncoding!==a||i.isInstancedMesh&&!1===c.instancing?u=!0:i.isInstancedMesh||!0!==c.instancing?i.isSkinnedMesh&&!1===c.skinning?u=!0:i.isSkinnedMesh||!0!==c.skinning?c.envMap!==o||n.fog&&c.fog!==r?u=!0:void 0===c.numClippingPlanes||c.numClippingPlanes===mt.numPlanes&&c.numIntersection===mt.numIntersection?c.vertexAlphas!==l&&(u=!0):u=!0:u=!0:u=!0:(u=!0,c.__version=n.version);let d=c.currentProgram;!0===u&&(d=Ot(n,e,i));let p=!1,m=!1,f=!1;const g=d.getUniforms(),v=c.uniforms;if(nt.useProgram(d.program)&&(p=!0,m=!0,f=!0),n.id!==A&&(A=n.id,m=!0),p||C!==t){if(g.setValue(Mt,\"projectionMatrix\",t.projectionMatrix),et.logarithmicDepthBuffer&&g.setValue(Mt,\"logDepthBufFC\",2/(Math.log(t.far+1)/Math.LN2)),C!==t&&(C=t,m=!0,f=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshStandardMaterial||n.envMap){const e=g.map.cameraPosition;void 0!==e&&e.setValue(Mt,X.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial)&&g.setValue(Mt,\"isOrthographic\",!0===t.isOrthographicCamera),(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.isShadowMaterial||i.isSkinnedMesh)&&g.setValue(Mt,\"viewMatrix\",t.matrixWorldInverse)}if(i.isSkinnedMesh){g.setOptional(Mt,i,\"bindMatrix\"),g.setOptional(Mt,i,\"bindMatrixInverse\");const t=i.skeleton;t&&(et.floatVertexTextures?(null===t.boneTexture&&t.computeBoneTexture(),g.setValue(Mt,\"boneTexture\",t.boneTexture,st),g.setValue(Mt,\"boneTextureSize\",t.boneTextureSize)):g.setOptional(Mt,t,\"boneMatrices\"))}var y,_;return(m||c.receiveShadow!==i.receiveShadow)&&(c.receiveShadow=i.receiveShadow,g.setValue(Mt,\"receiveShadow\",i.receiveShadow)),m&&(g.setValue(Mt,\"toneMappingExposure\",M.toneMappingExposure),c.needsLights&&(_=f,(y=v).ambientLightColor.needsUpdate=_,y.lightProbe.needsUpdate=_,y.directionalLights.needsUpdate=_,y.directionalLightShadows.needsUpdate=_,y.pointLights.needsUpdate=_,y.pointLightShadows.needsUpdate=_,y.spotLights.needsUpdate=_,y.spotLightShadows.needsUpdate=_,y.rectAreaLights.needsUpdate=_,y.hemisphereLights.needsUpdate=_),r&&n.fog&&ut.refreshFogUniforms(v,r),ut.refreshMaterialUniforms(v,n,z,N,j),ji.upload(Mt,c.uniformsList,v,st)),n.isShaderMaterial&&!0===n.uniformsNeedUpdate&&(ji.upload(Mt,c.uniformsList,v,st),n.uniformsNeedUpdate=!1),n.isSpriteMaterial&&g.setValue(Mt,\"center\",i.center),g.setValue(Mt,\"modelViewMatrix\",i.modelViewMatrix),g.setValue(Mt,\"normalMatrix\",i.normalMatrix),g.setValue(Mt,\"modelMatrix\",i.matrixWorld),d}It.setAnimationLoop((function(t){Ct&&Ct(t)})),\"undefined\"!=typeof window&&It.setContext(window),this.setAnimationLoop=function(t){Ct=t,Tt.setAnimationLoop(t),null===t?It.stop():It.start()},Tt.addEventListener(\"sessionstart\",Pt),Tt.addEventListener(\"sessionend\",Dt),this.render=function(t,e){if(void 0!==e&&!0!==e.isCamera)return void console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");if(!0===b)return;!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),!0===Tt.enabled&&!0===Tt.isPresenting&&(!0===Tt.cameraAutoUpdate&&Tt.updateCamera(e),e=Tt.getCamera()),!0===t.isScene&&t.onBeforeRender(M,t,e,E),x=pt.get(t,w.length),x.init(),w.push(x),q.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),k.setFromProjectionMatrix(q),W=this.localClippingEnabled,V=mt.init(this.clippingPlanes,W,e),y=dt.get(t,_.length),y.init(),_.push(y),Nt(t,e,0,M.sortObjects),y.finish(),!0===M.sortObjects&&y.sort(F,O),!0===V&&mt.beginShadows();const n=x.state.shadowsArray;ft.render(n,t,e),x.setupLights(),x.setupLightsView(e),!0===V&&mt.endShadows(),!0===this.info.autoReset&&this.info.reset(),gt.render(y,t);const i=y.opaque,r=y.transmissive,a=y.transparent;i.length>0&&zt(i,t,e),r.length>0&&function(t,e,n,i){if(null===j){const t=!0===l&&!0===et.isWebGL2;j=new(t?Q:J)(1024,1024,{generateMipmaps:!0,type:null!==_t.convert(m)?m:h,minFilter:c,magFilter:o,wrapS:s,wrapT:s})}const r=M.getRenderTarget();M.setRenderTarget(j),M.clear();const a=M.toneMapping;M.toneMapping=0,zt(t,n,i),M.toneMapping=a,st.updateMultisampleRenderTarget(j),st.updateRenderTargetMipmap(j),M.setRenderTarget(r),zt(e,n,i)}(i,r,t,e),a.length>0&&zt(a,t,e),null!==E&&(st.updateMultisampleRenderTarget(E),st.updateRenderTargetMipmap(E)),!0===t.isScene&&t.onAfterRender(M,t,e),nt.buffers.depth.setTest(!0),nt.buffers.depth.setMask(!0),nt.buffers.color.setMask(!0),nt.setPolygonOffset(!1),wt.resetDefaultState(),A=-1,C=null,w.pop(),x=w.length>0?w[w.length-1]:null,_.pop(),y=_.length>0?_[_.length-1]:null},this.getActiveCubeFace=function(){return S},this.getActiveMipmapLevel=function(){return T},this.getRenderTarget=function(){return E},this.setRenderTarget=function(t,e=0,n=0){E=t,S=e,T=n,t&&void 0===rt.get(t).__webglFramebuffer&&st.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(s=!0);const a=rt.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=a[e],r=!0):i=t.isWebGLMultisampleRenderTarget?rt.get(t).__webglMultisampledFramebuffer:a,R.copy(t.viewport),P.copy(t.scissor),D=t.scissorTest}else R.copy(B).multiplyScalar(z).floor(),P.copy(U).multiplyScalar(z).floor(),D=H;if(nt.bindFramebuffer(36160,i)&&et.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(G.length!==n.length||36064!==G[0]){for(let t=0,e=n.length;t<e;t++)G[t]=36064+t;G.length=n.length,e=!0}}else 1===G.length&&36064===G[0]||(G[0]=36064,G.length=1,e=!0);else 1===G.length&&1029===G[0]||(G[0]=1029,G.length=1,e=!0);e&&(et.isWebGL2?Mt.drawBuffers(G):tt.get(\"WEBGL_draw_buffers\").drawBuffersWEBGL(G))}if(nt.viewport(R),nt.scissor(P),nt.setScissorTest(D),r){const i=rt.get(t.texture);Mt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(s){const i=rt.get(t.texture),r=e||0;Mt.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");let o=rt.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){nt.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==v&&_t.convert(o)!==Mt.getParameter(35739))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\");const c=l===m&&(tt.has(\"EXT_color_buffer_half_float\")||et.isWebGL2&&tt.has(\"EXT_color_buffer_float\"));if(!(l===h||_t.convert(l)===Mt.getParameter(35738)||l===p&&(et.isWebGL2||tt.has(\"OES_texture_float\")||tt.has(\"WEBGL_color_buffer_float\"))||c))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\");36053===Mt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&Mt.readPixels(e,n,i,r,_t.convert(o),_t.convert(l),s):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\")}finally{const t=null!==E?rt.get(E).__webglFramebuffer:null;nt.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);let a=_t.convert(e.format);et.isWebGL2&&(6407===a&&(a=32849),6408===a&&(a=32856)),st.setTexture2D(e,0),Mt.copyTexImage2D(3553,n,a,t.x,t.y,r,s,0),nt.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=_t.convert(n.format),o=_t.convert(n.type);st.setTexture2D(n,0),Mt.pixelStorei(37440,n.flipY),Mt.pixelStorei(37441,n.premultiplyAlpha),Mt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?Mt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?Mt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):Mt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&Mt.generateMipmap(3553),nt.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(M.isWebGL1Renderer)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=_t.convert(i.format),c=_t.convert(i.type);let h;if(i.isDataTexture3D)st.setTexture3D(i,0),h=32879;else{if(!i.isDataTexture2DArray)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\");st.setTexture2DArray(i,0),h=35866}Mt.pixelStorei(37440,i.flipY),Mt.pixelStorei(37441,i.premultiplyAlpha),Mt.pixelStorei(3317,i.unpackAlignment);const u=Mt.getParameter(3314),d=Mt.getParameter(32878),p=Mt.getParameter(3316),m=Mt.getParameter(3315),f=Mt.getParameter(32877),g=n.isCompressedTexture?n.mipmaps[0]:n.image;Mt.pixelStorei(3314,g.width),Mt.pixelStorei(32878,g.height),Mt.pixelStorei(3316,t.min.x),Mt.pixelStorei(3315,t.min.y),Mt.pixelStorei(32877,t.min.z),n.isDataTexture||n.isDataTexture3D?Mt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g.data):n.isCompressedTexture?(console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\"),Mt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):Mt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),Mt.pixelStorei(3314,u),Mt.pixelStorei(32878,d),Mt.pixelStorei(3316,p),Mt.pixelStorei(3315,m),Mt.pixelStorei(32877,f),0===r&&i.generateMipmaps&&Mt.generateMipmap(h),nt.unbindTexture()},this.initTexture=function(t){st.setTexture2D(t,0),nt.unbindTexture()},this.resetState=function(){S=0,T=0,E=null,nt.reset(),wt.reset()},\"undefined\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}(class extends Fr{}).prototype.isWebGL1Renderer=!0;class Or extends ee{constructor(){super(),this.type=\"Scene\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\"undefined\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}Or.prototype.isScene=!0;class Br{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=R,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=O()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;i<r;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=O()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=O()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}Br.prototype.isInterleavedBuffer=!0;const Ur=new $;class Hr{constructor(t,e,n,i=!1){this.name=\"\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e<n;e++)Ur.x=this.getX(e),Ur.y=this.getY(e),Ur.z=this.getZ(e),Ur.applyMatrix4(t),this.setXYZ(e,Ur.x,Ur.y,Ur.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)Ur.x=this.getX(e),Ur.y=this.getY(e),Ur.z=this.getZ(e),Ur.applyNormalMatrix(t),this.setXYZ(e,Ur.x,Ur.y,Ur.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)Ur.x=this.getX(e),Ur.y=this.getY(e),Ur.z=this.getZ(e),Ur.transformDirection(t),this.setXYZ(e,Ur.x,Ur.y,Ur.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=r,this}clone(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return new Te(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new Hr(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}Hr.prototype.isInterleavedBufferAttribute=!0;class Gr extends me{constructor(t){super(),this.type=\"SpriteMaterial\",this.color=new we(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}let kr;Gr.prototype.isSpriteMaterial=!0;const Vr=new $,Wr=new $,jr=new $,qr=new k,Xr=new k,Yr=new Rt,Zr=new $,Jr=new $,Qr=new $,Kr=new k,$r=new k,ts=new k;function es(t,e,n,i,r,s){qr.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(Xr.x=s*qr.x-r*qr.y,Xr.y=r*qr.x+s*qr.y):Xr.copy(qr),t.copy(e),t.x+=Xr.x,t.y+=Xr.y,t.applyMatrix4(Yr)}(class extends ee{constructor(t){if(super(),this.type=\"Sprite\",void 0===kr){kr=new Oe;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new Br(t,5);kr.setIndex([0,1,2,0,2,3]),kr.setAttribute(\"position\",new Hr(e,3,0,!1)),kr.setAttribute(\"uv\",new Hr(e,2,3,!1))}this.geometry=kr,this.material=void 0!==t?t:new Gr,this.center=new k(.5,.5)}raycast(t,e){null===t.camera&&console.error('THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.'),Wr.setFromMatrixScale(this.matrixWorld),Yr.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),jr.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&Wr.multiplyScalar(-jr.z);const n=this.material.rotation;let i,r;0!==n&&(r=Math.cos(n),i=Math.sin(n));const s=this.center;es(Zr.set(-.5,-.5,0),jr,s,Wr,i,r),es(Jr.set(.5,-.5,0),jr,s,Wr,i,r),es(Qr.set(.5,.5,0),jr,s,Wr,i,r),Kr.set(0,0),$r.set(1,0),ts.set(1,1);let a=t.ray.intersectTriangle(Zr,Jr,Qr,!1,Vr);if(null===a&&(es(Jr.set(-.5,.5,0),jr,s,Wr,i,r),$r.set(0,1),a=t.ray.intersectTriangle(Zr,Qr,Jr,!1,Vr),null===a))return;const o=t.ray.origin.distanceTo(Vr);o<t.near||o>t.far||e.push({distance:o,point:Vr.clone(),uv:de.getUV(Vr,Zr,Jr,Qr,Kr,$r,ts,new k),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}).prototype.isSprite=!0;const ns=new $,is=new Z,rs=new Z,ss=new $,as=new Rt;class os extends en{constructor(t,e){super(t,e),this.type=\"SkinnedMesh\",this.bindMode=\"attached\",this.bindMatrix=new Rt,this.bindMatrixInverse=new Rt}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new Z,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n<i;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\"attached\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\"detached\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\"THREE.SkinnedMesh: Unrecognized bindMode: \"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;is.fromBufferAttribute(i.attributes.skinIndex,t),rs.fromBufferAttribute(i.attributes.skinWeight,t),ns.fromBufferAttribute(i.attributes.position,t).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t<4;t++){const i=rs.getComponent(t);if(0!==i){const r=is.getComponent(t);as.multiplyMatrices(n.bones[r].matrixWorld,n.boneInverses[r]),e.addScaledVector(ss.copy(ns).applyMatrix4(as),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}os.prototype.isSkinnedMesh=!0;(class extends ee{constructor(){super(),this.type=\"Bone\"}}).prototype.isBone=!0;(class extends X{constructor(t=null,e=1,n=1,i,r,s,a,o,l=1003,c=1003,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={data:t,width:e,height:n},this.magFilter=l,this.minFilter=c,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}).prototype.isDataTexture=!0;const ls=new Rt,cs=new Rt,hs=[],us=new en;(class extends en{constructor(t,e,n){super(t,e),this.instanceMatrix=new Te(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor&&(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(us.geometry=this.geometry,us.material=this.material,void 0!==us.material)for(let r=0;r<i;r++){this.getMatrixAt(r,ls),cs.multiplyMatrices(n,ls),us.matrixWorld=cs,us.raycast(t,hs);for(let t=0,n=hs.length;t<n;t++){const n=hs[t];n.instanceId=r,n.object=this,e.push(n)}hs.length=0}}setColorAt(t,e){null===this.instanceColor&&(this.instanceColor=new Te(new Float32Array(3*this.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\"dispose\"})}}).prototype.isInstancedMesh=!0;class ds extends me{constructor(t){super(),this.type=\"LineBasicMaterial\",this.color=new we(16777215),this.linewidth=1,this.linecap=\"round\",this.linejoin=\"round\",this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.morphTargets=t.morphTargets,this}}ds.prototype.isLineBasicMaterial=!0;const ps=new $,ms=new $,fs=new Rt,gs=new Ct,vs=new wt;class ys extends ee{constructor(t=new Oe,e=new ds){super(),this.type=\"Line\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t<i;t++)ps.fromBufferAttribute(e,t-1),ms.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=ps.distanceTo(ms);t.setAttribute(\"lineDistance\",new Le(n,1))}else console.warn(\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry&&console.error(\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Line.threshold,s=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),vs.copy(n.boundingSphere),vs.applyMatrix4(i),vs.radius+=r,!1===t.ray.intersectsSphere(vs))return;fs.copy(i).invert(),gs.copy(t.ray).applyMatrix4(fs);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a,l=new $,c=new $,h=new $,u=new $,d=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,r=n.attributes.position;if(null!==i){for(let n=Math.max(0,s.start),a=Math.min(i.count,s.start+s.count)-1;n<a;n+=d){const s=i.getX(n),a=i.getX(n+1);l.fromBufferAttribute(r,s),c.fromBufferAttribute(r,a);if(gs.distanceSqToSegment(l,c,u,h)>o)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);d<t.near||d>t.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;n<i;n+=d){l.fromBufferAttribute(r,n),c.fromBufferAttribute(r,n+1);if(gs.distanceSqToSegment(l,c,u,h)>o)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);i<t.near||i>t.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error(\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}ys.prototype.isLine=!0;const xs=new $,_s=new $;class ws extends ys{constructor(t,e){super(t,e),this.type=\"LineSegments\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t<i;t+=2)xs.fromBufferAttribute(e,t),_s.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+xs.distanceTo(_s);t.setAttribute(\"lineDistance\",new Le(n,1))}else console.warn(\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry&&console.error(\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}}ws.prototype.isLineSegments=!0;(class extends ys{constructor(t,e){super(t,e),this.type=\"LineLoop\"}}).prototype.isLineLoop=!0;class Ms extends me{constructor(t){super(),this.type=\"PointsMaterial\",this.color=new we(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.morphTargets=t.morphTargets,this}}Ms.prototype.isPointsMaterial=!0;const bs=new Rt,Ss=new Ct,Ts=new wt,Es=new $;function As(t,e,n,i,r,s,a){const o=Ss.distanceSqToPoint(t);if(o<n){const n=new $;Ss.closestPointToPoint(t,n),n.applyMatrix4(i);const l=r.ray.origin.distanceTo(n);if(l<r.near||l>r.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}(class extends ee{constructor(t=new Oe,e=new Ms){super(),this.type=\"Points\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,s=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ts.copy(n.boundingSphere),Ts.applyMatrix4(i),Ts.radius+=r,!1===t.ray.intersectsSphere(Ts))return;bs.copy(i).invert(),Ss.copy(t.ray).applyMatrix4(bs);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position;if(null!==r){for(let n=Math.max(0,s.start),l=Math.min(r.count,s.start+s.count);n<l;n++){const s=r.getX(n);Es.fromBufferAttribute(a,s),As(Es,s,o,i,t,e,this)}}else{for(let n=Math.max(0,s.start),r=Math.min(a.count,s.start+s.count);n<r;n++)Es.fromBufferAttribute(a,n),As(Es,n,o,i,t,e,this)}}else console.error(\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}).prototype.isPoints=!0;(class extends X{constructor(t,e,n,i,r,s,a,o,c){super(t,e,n,i,r,s,a,o,c),this.format=void 0!==a?a:g,this.minFilter=void 0!==s?s:l,this.magFilter=void 0!==r?r:l,this.generateMipmaps=!1;const h=this;\"requestVideoFrameCallback\"in t&&t.requestVideoFrameCallback((function e(){h.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\"requestVideoFrameCallback\"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;(class extends X{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isCompressedTexture=!0;(class extends X{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;(class extends X{constructor(t,e,n,i,r,s,a,l,c,h){if((h=void 0!==h?h:y)!==y&&h!==_)throw new Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");void 0===n&&h===y&&(n=u),void 0===n&&h===_&&(n=f),super(null,i,r,s,a,l,h,n,c),this.image={width:t,height:e},this.magFilter=void 0!==a?a:o,this.minFilter=void 0!==l?l:o,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0;class Ls extends Oe{constructor(t=1,e=1,n=1,i=8,r=1,s=!1,a=0,o=2*Math.PI){super(),this.type=\"CylinderGeometry\",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],h=[],u=[],d=[];let p=0;const m=[],f=n/2;let g=0;function v(n){const r=p,s=new k,m=new $;let v=0;const y=!0===n?t:e,x=!0===n?1:-1;for(let t=1;t<=i;t++)h.push(0,f*x,0),u.push(0,x,0),d.push(.5,.5),p++;const _=p;for(let t=0;t<=i;t++){const e=t/i*o+a,n=Math.cos(e),r=Math.sin(e);m.x=y*r,m.y=f*x,m.z=y*n,h.push(m.x,m.y,m.z),u.push(0,x,0),s.x=.5*n+.5,s.y=.5*r*x+.5,d.push(s.x,s.y),p++}for(let t=0;t<i;t++){const e=r+t,i=_+t;!0===n?c.push(i,i+1,e):c.push(i+1,i,e),v+=3}l.addGroup(g,v,!0===n?1:2),g+=v}!function(){const s=new $,v=new $;let y=0;const x=(e-t)/n;for(let l=0;l<=r;l++){const c=[],g=l/r,y=g*(e-t)+t;for(let t=0;t<=i;t++){const e=t/i,r=e*o+a,l=Math.sin(r),m=Math.cos(r);v.x=y*l,v.y=-g*n+f,v.z=y*m,h.push(v.x,v.y,v.z),s.set(l,x,m).normalize(),u.push(s.x,s.y,s.z),d.push(e,1-g),c.push(p++)}m.push(c)}for(let t=0;t<i;t++)for(let e=0;e<r;e++){const n=m[e][t],i=m[e+1][t],r=m[e+1][t+1],s=m[e][t+1];c.push(n,i,s),c.push(i,r,s),y+=6}l.addGroup(g,y,0),g+=y}(),!1===s&&(t>0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute(\"position\",new Le(h,3)),this.setAttribute(\"normal\",new Le(u,3)),this.setAttribute(\"uv\",new Le(d,2))}static fromJSON(t){return new Ls(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}new $,new $,new $,new de;class Cs{constructor(){this.type=\"Curve\",this.arcLengthDivisions=200}getPoint(){return console.warn(\"THREE.Curve: .getPoint() not implemented.\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a<0)o=i+1;else{if(!(a>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),a=this.getPoint(r),o=e||(s.isVector2?new k:new $);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new $,i=[],r=[],s=[],a=new $,o=new Rt;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new $),i[e].normalize()}r[0]=new $,s[0]=new $;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(B(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(B(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\"Curve\",generator:\"Curve.toJSON\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Rs extends Cs{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type=\"EllipseCurve\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new k,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)<Number.EPSILON;for(;r<0;)r+=i;for(;r>i;)r-=i;r<Number.EPSILON&&(r=s?0:i),!0!==this.aClockwise||s||(r===i?r=-i:r-=i);const a=this.aStartAngle+t*r;let o=this.aX+this.xRadius*Math.cos(a),l=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=o-this.aX,i=l-this.aY;o=n*t-i*e+this.aX,l=n*e+i*t+this.aY}return n.set(o,l)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}Rs.prototype.isEllipseCurve=!0;class Ps extends Rs{constructor(t,e,n,i,r,s){super(t,e,n,n,i,r,s),this.type=\"ArcCurve\"}}function Ds(){let t=0,e=0,n=0,i=0;function r(r,s,a,o){t=r,e=a,n=-3*r+3*s-2*a-o,i=2*r-2*s+a+o}return{initCatmullRom:function(t,e,n,i,s){r(e,n,s*(n-t),s*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,s,a,o){let l=(e-t)/s-(n-t)/(s+a)+(n-e)/a,c=(n-e)/a-(i-e)/(a+o)+(i-n)/o;l*=a,c*=a,r(e,n,l,c)},calc:function(r){const s=r*r;return t+e*r+n*s+i*(s*r)}}}Ps.prototype.isArcCurve=!0;const Is=new $,Ns=new Ds,zs=new Ds,Fs=new Ds;class Os extends Cs{constructor(t=[],e=!1,n=\"centripetal\",i=.5){super(),this.type=\"CatmullRomCurve3\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new $){const n=e,i=this.points,r=i.length,s=(r-(this.closed?0:1))*t;let a,o,l=Math.floor(s),c=s-l;this.closed?l+=l>0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=i[(l-1)%r]:(Is.subVectors(i[0],i[1]).add(i[0]),a=Is);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2<r?o=i[(l+2)%r]:(Is.subVectors(i[r-1],i[r-2]).add(i[r-1]),o=Is),\"centripetal\"===this.curveType||\"chordal\"===this.curveType){const t=\"chordal\"===this.curveType?.5:.25;let e=Math.pow(a.distanceToSquared(h),t),n=Math.pow(h.distanceToSquared(u),t),i=Math.pow(u.distanceToSquared(o),t);n<1e-4&&(n=1),e<1e-4&&(e=n),i<1e-4&&(i=n),Ns.initNonuniformCatmullRom(a.x,h.x,u.x,o.x,e,n,i),zs.initNonuniformCatmullRom(a.y,h.y,u.y,o.y,e,n,i),Fs.initNonuniformCatmullRom(a.z,h.z,u.z,o.z,e,n,i)}else\"catmullrom\"===this.curveType&&(Ns.initCatmullRom(a.x,h.x,u.x,o.x,this.tension),zs.initCatmullRom(a.y,h.y,u.y,o.y,this.tension),Fs.initCatmullRom(a.z,h.z,u.z,o.z,this.tension));return n.set(Ns.calc(c),zs.calc(c),Fs.calc(c)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new $).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}function Bs(t,e,n,i,r){const s=.5*(i-e),a=.5*(r-n),o=t*t;return(2*n-2*i+s+a)*(t*o)+(-3*n+3*i-2*s-a)*o+s*t+n}function Us(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function Hs(t,e,n,i,r){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,r)}Os.prototype.isCatmullRomCurve3=!0;class Gs extends Cs{constructor(t=new k,e=new k,n=new k,i=new k){super(),this.type=\"CubicBezierCurve\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new k){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(Hs(t,i.x,r.x,s.x,a.x),Hs(t,i.y,r.y,s.y,a.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}Gs.prototype.isCubicBezierCurve=!0;class ks extends Cs{constructor(t=new $,e=new $,n=new $,i=new $){super(),this.type=\"CubicBezierCurve3\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new $){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(Hs(t,i.x,r.x,s.x,a.x),Hs(t,i.y,r.y,s.y,a.y),Hs(t,i.z,r.z,s.z,a.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}ks.prototype.isCubicBezierCurve3=!0;class Vs extends Cs{constructor(t=new k,e=new k){super(),this.type=\"LineCurve\",this.v1=t,this.v2=e}getPoint(t,e=new k){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new k;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}Vs.prototype.isLineCurve=!0;class Ws extends Cs{constructor(t=new k,e=new k,n=new k){super(),this.type=\"QuadraticBezierCurve\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new k){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(Us(t,i.x,r.x,s.x),Us(t,i.y,r.y,s.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}Ws.prototype.isQuadraticBezierCurve=!0;class js extends Cs{constructor(t=new $,e=new $,n=new $){super(),this.type=\"QuadraticBezierCurve3\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new $){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(Us(t,i.x,r.x,s.x),Us(t,i.y,r.y,s.y),Us(t,i.z,r.z,s.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}js.prototype.isQuadraticBezierCurve3=!0;class qs extends Cs{constructor(t=[]){super(),this.type=\"SplineCurve\",this.points=t}getPoint(t,e=new k){const n=e,i=this.points,r=(i.length-1)*t,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],c=i[s>i.length-2?i.length-1:s+1],h=i[s>i.length-3?i.length-1:s+2];return n.set(Bs(a,o.x,l.x,c.x,h.x),Bs(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new k).fromArray(n))}return this}}qs.prototype.isSplineCurve=!0;var Xs=Object.freeze({__proto__:null,ArcCurve:Ps,CatmullRomCurve3:Os,CubicBezierCurve:Gs,CubicBezierCurve3:ks,EllipseCurve:Rs,LineCurve:Vs,LineCurve3:class extends Cs{constructor(t=new $,e=new $){super(),this.type=\"LineCurve3\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new $){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}},QuadraticBezierCurve:Ws,QuadraticBezierCurve3:js,SplineCurve:qs});const Ys=function(t,e,n=2){const i=e&&e.length,r=i?e[0]*n:t.length;let s=Zs(t,0,r,n,!0);const a=[];if(!s||s.next===s.prev)return a;let o,l,c,h,u,d,p;if(i&&(s=function(t,e,n,i){const r=[];let s,a,o,l,c;for(s=0,a=e.length;s<a;s++)o=e[s]*i,l=s<a-1?e[s+1]*i:t.length,c=Zs(t,o,l,i,!1),c===c.next&&(c.steiner=!0),r.push(aa(c));for(r.sort(na),s=0;s<r.length;s++)ia(r[s],n),n=Js(n,n.next);return n}(t,e,s,n)),t.length>80*n){o=c=t[0],l=h=t[1];for(let e=n;e<r;e+=n)u=t[e],d=t[e+1],u<o&&(o=u),d<l&&(l=d),u>c&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return Qs(s,a,n,o,l,p),a};function Zs(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s<n;s+=i)r+=(t[a]-t[s])*(t[s+1]+t[a+1]),a=s;return r}(t,e,n,i)>0)for(s=e;s<n;s+=i)a=ga(s,t[s],t[s+1],a);else for(s=n-i;s>=e;s-=i)a=ga(s,t[s],t[s+1],a);return a&&ha(a,a.next)&&(va(a),a=a.next),a}function Js(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!ha(i,i.next)&&0!==ca(i.prev,i,i.next))i=i.next;else{if(va(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function Qs(t,e,n,i,r,s,a){if(!t)return;!a&&s&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=sa(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e<c&&(o++,i=i.nextZ,i);e++);for(l=c;o>0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a>1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?$s(t,i,r,s):Ks(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),va(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?Qs(t=ta(Js(t),e,n),e,n,i,r,s,2):2===a&&ea(t,e,n,i,r,s):Qs(Js(t),e,n,i,r,s,1);break}}function Ks(t){const e=t.prev,n=t,i=t.next;if(ca(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(oa(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&ca(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function $s(t,e,n,i){const r=t.prev,s=t,a=t.next;if(ca(r,s,a)>=0)return!1;const o=r.x<s.x?r.x<a.x?r.x:a.x:s.x<a.x?s.x:a.x,l=r.y<s.y?r.y<a.y?r.y:a.y:s.y<a.y?s.y:a.y,c=r.x>s.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,h=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=sa(o,l,e,n,i),d=sa(c,h,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&oa(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&ca(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&oa(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&ca(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&oa(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&ca(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&oa(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&ca(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function ta(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!ha(r,s)&&ua(r,i,i.next,s)&&ma(r,s)&&ma(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),va(i),va(i.next),i=t=s),i=i.next}while(i!==t);return Js(i)}function ea(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&la(a,t)){let o=fa(a,t);return a=Js(a,a.next),o=Js(o,o.next),Qs(a,e,n,i,r,s),void Qs(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function na(t,e){return t.x-e.x}function ia(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!s)return null;if(i===a)return s;const o=s,l=s.x,c=s.y;let h,u=1/0;n=s;do{i>=n.x&&n.x>=l&&i!==n.x&&oa(r<c?i:a,r,l,c,r<c?a:i,r,n.x,n.y)&&(h=Math.abs(r-n.y)/(i-n.x),ma(n,t)&&(h<u||h===u&&(n.x>s.x||n.x===s.x&&ra(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e)){const n=fa(e,t);Js(e,e.next),Js(n,n.next)}}function ra(t,e){return ca(t.prev,t,e.prev)<0&&ca(e.next,t,t.next)<0}function sa(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function aa(t){let e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function oa(t,e,n,i,r,s,a,o){return(r-a)*(e-o)-(t-a)*(s-o)>=0&&(t-a)*(i-o)-(n-a)*(e-o)>=0&&(n-a)*(s-o)-(r-a)*(i-o)>=0}function la(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&ua(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(ma(t,e)&&ma(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(ca(t.prev,t,e.prev)||ca(t,e.prev,e))||ha(t,e)&&ca(t.prev,t,t.next)>0&&ca(e.prev,e,e.next)>0)}function ca(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function ha(t,e){return t.x===e.x&&t.y===e.y}function ua(t,e,n,i){const r=pa(ca(t,e,n)),s=pa(ca(t,e,i)),a=pa(ca(n,i,t)),o=pa(ca(n,i,e));return r!==s&&a!==o||(!(0!==r||!da(t,n,e))||(!(0!==s||!da(t,i,e))||(!(0!==a||!da(n,t,i))||!(0!==o||!da(n,e,i)))))}function da(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function pa(t){return t>0?1:t<0?-1:0}function ma(t,e){return ca(t.prev,t,t.next)<0?ca(t,e,t.next)>=0&&ca(t,t.prev,e)>=0:ca(t,e,t.prev)<0||ca(t,t.next,e)<0}function fa(t,e){const n=new ya(t.i,t.x,t.y),i=new ya(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function ga(t,e,n,i){const r=new ya(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function va(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 ya(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class xa{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r<e;i=r++)n+=t[i].x*t[r].y-t[r].x*t[i].y;return.5*n}static isClockWise(t){return xa.area(t)<0}static triangulateShape(t,e){const n=[],i=[],r=[];_a(t),wa(n,t);let s=t.length;e.forEach(_a);for(let t=0;t<e.length;t++)i.push(s),s+=e[t].length,wa(n,e[t]);const a=Ys(n,i);for(let t=0;t<a.length;t+=3)r.push(a.slice(t,t+3));return r}}function _a(t){const e=t.length;e>2&&t[e-1].equals(t[0])&&t.pop()}function wa(t,e){for(let n=0;n<e.length;n++)t.push(e[n].x),t.push(e[n].y)}class Ma extends Oe{constructor(t,e){super(),this.type=\"ExtrudeGeometry\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],r=[];for(let e=0,n=t.length;e<n;e++){s(t[e])}function s(t){const s=[],a=void 0!==e.curveSegments?e.curveSegments:12,o=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:100,c=void 0===e.bevelEnabled||e.bevelEnabled,h=void 0!==e.bevelThickness?e.bevelThickness:6,u=void 0!==e.bevelSize?e.bevelSize:h-2,d=void 0!==e.bevelOffset?e.bevelOffset:0,p=void 0!==e.bevelSegments?e.bevelSegments:3;const m=e.extrudePath,f=void 0!==e.UVGenerator?e.UVGenerator:ba;void 0!==e.amount&&(console.warn(\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\"),l=e.amount);let g,v,y,x,_,w=!1;m&&(g=m.getSpacedPoints(o),w=!0,c=!1,v=m.computeFrenetFrames(o,!1),y=new $,x=new $,_=new $),c||(p=0,h=0,u=0,d=0);const M=t.extractPoints(a);let b=M.shape;const S=M.holes;if(!xa.isClockWise(b)){b=b.reverse();for(let t=0,e=S.length;t<e;t++){const e=S[t];xa.isClockWise(e)&&(S[t]=e.reverse())}}const T=xa.triangulateShape(b,S),E=b;for(let t=0,e=S.length;t<e;t++){const e=S[t];b=b.concat(e)}function A(t,e,n){return e||console.error(\"THREE.ExtrudeGeometry: vec does not exist\"),e.clone().multiplyScalar(n).add(t)}const L=b.length,C=T.length;function R(t,e,n){let i,r,s;const a=t.x-e.x,o=t.y-e.y,l=n.x-t.x,c=n.y-t.y,h=a*a+o*o,u=a*c-o*l;if(Math.abs(u)>Number.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((n.x-c/d-p)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=p+a*f-t.x,r=m+o*f-t.y;const g=i*i+r*r;if(g<=2)return new k(i,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new k(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t<e;t++,n++,i++)n===e&&(n=0),i===e&&(i=0),P[t]=R(E[t],E[n],E[i]);const D=[];let I,N=P.concat();for(let t=0,e=S.length;t<e;t++){const e=S[t];I=[];for(let t=0,n=e.length,i=n-1,r=t+1;t<n;t++,i++,r++)i===n&&(i=0),r===n&&(r=0),I[t]=R(e[t],e[i],e[r]);D.push(I),N=N.concat(I)}for(let t=0;t<p;t++){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t<e;t++){const e=A(E[t],P[t],i);O(e.x,e.y,-n)}for(let t=0,e=S.length;t<e;t++){const e=S[t];I=D[t];for(let t=0,r=e.length;t<r;t++){const r=A(e[t],I[t],i);O(r.x,r.y,-n)}}}const z=u+d;for(let t=0;t<L;t++){const e=c?A(b[t],N[t],z):b[t];w?(x.copy(v.normals[0]).multiplyScalar(e.x),y.copy(v.binormals[0]).multiplyScalar(e.y),_.copy(g[0]).add(x).add(y),O(_.x,_.y,_.z)):O(e.x,e.y,0)}for(let t=1;t<=o;t++)for(let e=0;e<L;e++){const n=c?A(b[e],N[e],z):b[e];w?(x.copy(v.normals[t]).multiplyScalar(n.x),y.copy(v.binormals[t]).multiplyScalar(n.y),_.copy(g[t]).add(x).add(y),O(_.x,_.y,_.z)):O(n.x,n.y,l/o*t)}for(let t=p-1;t>=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t<e;t++){const e=A(E[t],P[t],i);O(e.x,e.y,l+n)}for(let t=0,e=S.length;t<e;t++){const e=S[t];I=D[t];for(let t=0,r=e.length;t<r;t++){const r=A(e[t],I[t],i);w?O(r.x,r.y+g[o-1].y,g[o-1].x+n):O(r.x,r.y,l+n)}}}function F(t,e){let n=t.length;for(;--n>=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t<n;t++){const n=L*t,s=L*(t+1);U(e+i+n,e+r+n,e+r+s,e+i+s)}}}function O(t,e,n){s.push(t),s.push(e),s.push(n)}function B(t,e,r){H(t),H(e),H(r);const s=i.length/3,a=f.generateTopUV(n,i,s-3,s-2,s-1);G(a[0]),G(a[1]),G(a[2])}function U(t,e,r,s){H(t),H(e),H(s),H(e),H(r),H(s);const a=i.length/3,o=f.generateSideWallUV(n,i,a-6,a-3,a-2,a-1);G(o[0]),G(o[1]),G(o[3]),G(o[1]),G(o[2]),G(o[3])}function H(t){i.push(s[3*t+0]),i.push(s[3*t+1]),i.push(s[3*t+2])}function G(t){r.push(t.x),r.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=L*t;for(let t=0;t<C;t++){const n=T[t];B(n[2]+e,n[1]+e,n[0]+e)}t=o+2*p,e=L*t;for(let t=0;t<C;t++){const n=T[t];B(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t<C;t++){const e=T[t];B(e[2],e[1],e[0])}for(let t=0;t<C;t++){const e=T[t];B(e[0]+L*o,e[1]+L*o,e[2]+L*o)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;F(E,e),e+=E.length;for(let t=0,n=S.length;t<n;t++){const n=S[t];F(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\"position\",new Le(i,3)),this.setAttribute(\"uv\",new Le(r,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e<i;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath&&(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i<r;i++){const r=e[t.shapes[i]];n.push(r)}const i=t.options.extrudePath;return void 0!==i&&(t.options.extrudePath=(new Xs[i.type]).fromJSON(i)),new Ma(n,t.options)}}const ba={generateTopUV:function(t,e,n,i,r){const s=e[3*n],a=e[3*n+1],o=e[3*i],l=e[3*i+1],c=e[3*r],h=e[3*r+1];return[new k(s,a),new k(o,l),new k(c,h)]},generateSideWallUV:function(t,e,n,i,r,s){const a=e[3*n],o=e[3*n+1],l=e[3*n+2],c=e[3*i],h=e[3*i+1],u=e[3*i+2],d=e[3*r],p=e[3*r+1],m=e[3*r+2],f=e[3*s],g=e[3*s+1],v=e[3*s+2];return Math.abs(o-h)<Math.abs(a-c)?[new k(a,1-l),new k(c,1-u),new k(d,1-m),new k(f,1-v)]:[new k(o,1-l),new k(h,1-u),new k(p,1-m),new k(g,1-v)]}};class Sa extends Oe{constructor(t,e=12){super(),this.type=\"ShapeGeometry\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],r=[],s=[];let a=0,o=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e<t.length;e++)l(t[e]),this.addGroup(a,o,e),a+=o,o=0;function l(t){const a=i.length/3,l=t.extractPoints(e);let c=l.shape;const h=l.holes;!1===xa.isClockWise(c)&&(c=c.reverse());for(let t=0,e=h.length;t<e;t++){const e=h[t];!0===xa.isClockWise(e)&&(h[t]=e.reverse())}const u=xa.triangulateShape(c,h);for(let t=0,e=h.length;t<e;t++){const e=h[t];c=c.concat(e)}for(let t=0,e=c.length;t<e;t++){const e=c[t];i.push(e.x,e.y,0),r.push(0,0,1),s.push(e.x,e.y)}for(let t=0,e=u.length;t<e;t++){const e=u[t],i=e[0]+a,r=e[1]+a,s=e[2]+a;n.push(i,r,s),o+=3}}this.setIndex(n),this.setAttribute(\"position\",new Le(i,3)),this.setAttribute(\"normal\",new Le(r,3)),this.setAttribute(\"uv\",new Le(s,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n<i;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i<r;i++){const r=e[t.shapes[i]];n.push(r)}return new Sa(n,t.curveSegments)}}(class extends me{constructor(t){super(),this.type=\"ShadowMaterial\",this.color=new we(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}).prototype.isShadowMaterial=!0;(class extends ln{constructor(t){super(t),this.type=\"RawShaderMaterial\"}}).prototype.isRawShaderMaterial=!0;class Ta extends me{constructor(t){super(),this.defines={STANDARD:\"\"},this.type=\"MeshStandardMaterial\",this.color=new we(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new we(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new k(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.vertexTangents=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this.vertexTangents=t.vertexTangents,this}}Ta.prototype.isMeshStandardMaterial=!0;(class extends Ta{constructor(t){super(),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.type=\"MeshPhysicalMaterial\",this.clearcoat=0,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new k(1,1),this.clearcoatNormalMap=null,this.reflectivity=.5,Object.defineProperty(this,\"ior\",{get:function(){return(1+.4*this.reflectivity)/(1-.4*this.reflectivity)},set:function(t){this.reflectivity=B(2.5*(t-1)/(t+1),0,1)}}),this.sheen=null,this.transmission=0,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationColor=new we(1,1,1),this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.reflectivity=t.reflectivity,t.sheen?this.sheen=(this.sheen||new we).copy(t.sheen):this.sheen=null,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this}}).prototype.isMeshPhysicalMaterial=!0;(class extends me{constructor(t){super(),this.type=\"MeshPhongMaterial\",this.color=new we(16777215),this.specular=new we(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new we(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new k(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}).prototype.isMeshPhongMaterial=!0;(class extends me{constructor(t){super(),this.defines={TOON:\"\"},this.type=\"MeshToonMaterial\",this.color=new we(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new we(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new k(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this}}).prototype.isMeshToonMaterial=!0;(class extends me{constructor(t){super(),this.type=\"MeshNormalMaterial\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new k(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}).prototype.isMeshNormalMaterial=!0;(class extends me{constructor(t){super(),this.type=\"MeshLambertMaterial\",this.color=new we(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new we(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this}}).prototype.isMeshLambertMaterial=!0;(class extends me{constructor(t){super(),this.defines={MATCAP:\"\"},this.type=\"MeshMatcapMaterial\",this.color=new we(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new k(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\"\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}).prototype.isMeshMatcapMaterial=!0;(class extends ds{constructor(t){super(),this.type=\"LineDashedMaterial\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}).prototype.isLineDashedMaterial=!0;const Ea={arraySlice:function(t,e,n){return Ea.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:\"number\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s&&void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a&&(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a&&(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a&&(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t<s.tracks.length;++t){const e=s.tracks[t],o=e.getValueSize(),l=[],c=[];for(let t=0;t<e.times.length;++t){const s=e.times[t]*r;if(!(s<n||s>=i)){l.push(e.times[t]);for(let n=0;n<o;++n)c.push(e.values[t*o+n])}}0!==l.length&&(e.times=Ea.convertArray(l,e.times.constructor),e.values=Ea.convertArray(c,e.values.constructor),a.push(e))}s.tracks=a;let o=1/0;for(let t=0;t<s.tracks.length;++t)o>s.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t<s.tracks.length;++t)s.tracks[t].shift(-1*o);return s.resetDuration(),s},makeClipAdditive:function(t,e=0,n=t,i=30){i<=0&&(i=30);const r=n.tracks.length,s=e/i;for(let e=0;e<r;++e){const i=n.tracks[e],r=i.ValueTypeName;if(\"bool\"===r||\"string\"===r)continue;const a=t.tracks.find((function(t){return t.name===i.name&&t.ValueTypeName===r}));if(void 0===a)continue;let o=0;const l=i.getValueSize();i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(o=l/3);let c=0;const h=a.getValueSize();a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(c=h/3);const u=i.times.length-1;let d;if(s<=i.times[0]){const t=o,e=l-o;d=Ea.arraySlice(i.values,t,e)}else if(s>=i.times[u]){const t=u*l+o,e=t+l-o;d=Ea.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=Ea.arraySlice(t.resultBuffer,e,n)}if(\"quaternion\"===r){(new K).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t<p;++t){const e=t*h+c;if(\"quaternion\"===r)K.multiplyQuaternionsFlat(a.values,e,d,0,a.values,e);else{const t=h-2*c;for(let n=0;n<t;++n)a.values[e+n]-=d[n]}}}return t.blendMode=2501,t}};class Aa{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],r=e[n-1];t:{e:{let s;n:{i:if(!(t<i)){for(let s=n+2;;){if(void 0===i){if(t<r)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,r)}if(n===s)break;if(r=i,i=e[++n],t<i)break e}s=e.length;break n}if(t>=r)break t;{const a=e[1];t<a&&(n=2,r=a);for(let s=n-2;;){if(void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===s)break;if(i=r,r=e[--n-1],t>=r)break e}s=n,n=0}}for(;n<s;){const i=n+s>>>1;t<e[i]?s=i:n=i+1}if(i=e[n],r=e[n-1],void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,r,t)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=t*i;for(let t=0;t!==i;++t)e[t]=n[r+t];return e}interpolate_(){throw new Error(\"call to abstract method\")}intervalChanged_(){}}Aa.prototype.beforeStart_=Aa.prototype.copySampleValue_,Aa.prototype.afterEnd_=Aa.prototype.copySampleValue_;class La extends Aa{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:S,endingEnd:S}}intervalChanged_(t,e,n){const i=this.parameterPositions;let r=t-2,s=t+1,a=i[r],o=i[s];if(void 0===a)switch(this.getSettings_().endingStart){case T:r=t,a=2*e-n;break;case E:r=i.length-2,a=e+i[r]-i[r+1];break;default:r=t,a=n}if(void 0===o)switch(this.getSettings_().endingEnd){case T:s=t,o=2*n-e;break;case E:s=1,o=n+i[1]-i[0];break;default:s=t-1,o=e}const l=.5*(n-e),c=this.valueSize;this._weightPrev=l/(e-a),this._weightNext=l/(o-n),this._offsetPrev=r*c,this._offsetNext=s*c}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=this._offsetPrev,h=this._offsetNext,u=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),m=p*p,f=m*p,g=-u*f+2*u*m-u*p,v=(1+u)*f+(-1.5-2*u)*m+(-.5+u)*p+1,y=(-1-d)*f+(1.5+d)*m+.5*p,x=d*f-d*m;for(let t=0;t!==a;++t)r[t]=g*s[c+t]+v*s[l+t]+y*s[o+t]+x*s[h+t];return r}}class Ca extends Aa{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=(n-e)/(i-e),h=1-c;for(let t=0;t!==a;++t)r[t]=s[l+t]*h+s[o+t]*c;return r}}class Ra extends Aa{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}class Pa{constructor(t,e,n,i){if(void 0===t)throw new Error(\"THREE.KeyframeTrack: track name is undefined\");if(void 0===e||0===e.length)throw new Error(\"THREE.KeyframeTrack: no keyframes in track named \"+t);this.name=t,this.times=Ea.convertArray(e,this.TimeBufferType),this.values=Ea.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:Ea.convertArray(t.times,Array),values:Ea.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation&&(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new Ra(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new Ca(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new La(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case w:e=this.InterpolantFactoryMethodDiscrete;break;case M:e=this.InterpolantFactoryMethodLinear;break;case b:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\"THREE.KeyframeTrack:\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return w;case this.InterpolantFactoryMethodLinear:return M;case this.InterpolantFactoryMethodSmooth:return b}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let r=0,s=i-1;for(;r!==i&&n[r]<t;)++r;for(;-1!==s&&n[s]>e;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=Ea.arraySlice(n,r,s),this.values=Ea.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error(\"THREE.KeyframeTrack: Invalid value size in track.\",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error(\"THREE.KeyframeTrack: Track is empty.\",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if(\"number\"==typeof i&&isNaN(i)){console.error(\"THREE.KeyframeTrack: Time is not a valid number.\",this,e,i),t=!1;break}if(null!==s&&s>i){console.error(\"THREE.KeyframeTrack: Out of order keys.\",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&Ea.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\"THREE.KeyframeTrack: Value is not a valid number.\",this,e,n),t=!1;break}}return t}optimize(){const t=Ea.arraySlice(this.times),e=Ea.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===b,r=t.length-1;let s=1;for(let a=1;a<r;++a){let r=!1;const o=t[a];if(o!==t[a+1]&&(1!==a||o!==t[0]))if(i)r=!0;else{const t=a*n,i=t-n,s=t+n;for(let a=0;a!==n;++a){const n=e[t+a];if(n!==e[i+a]||n!==e[s+a]){r=!0;break}}}if(r){if(a!==s){t[s]=t[a];const i=a*n,r=s*n;for(let t=0;t!==n;++t)e[r+t]=e[i+t]}++s}}if(r>0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=Ea.arraySlice(t,0,s),this.values=Ea.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=Ea.arraySlice(this.times,0),e=Ea.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Pa.prototype.TimeBufferType=Float32Array,Pa.prototype.ValueBufferType=Float32Array,Pa.prototype.DefaultInterpolation=M;class Da extends Pa{}Da.prototype.ValueTypeName=\"bool\",Da.prototype.ValueBufferType=Array,Da.prototype.DefaultInterpolation=w,Da.prototype.InterpolantFactoryMethodLinear=void 0,Da.prototype.InterpolantFactoryMethodSmooth=void 0;class Ia extends Pa{}Ia.prototype.ValueTypeName=\"color\";class Na extends Pa{}Na.prototype.ValueTypeName=\"number\";class za extends Aa{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)K.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Fa extends Pa{InterpolantFactoryMethodLinear(t){return new za(this.times,this.values,this.getValueSize(),t)}}Fa.prototype.ValueTypeName=\"quaternion\",Fa.prototype.DefaultInterpolation=M,Fa.prototype.InterpolantFactoryMethodSmooth=void 0;class Oa extends Pa{}Oa.prototype.ValueTypeName=\"string\",Oa.prototype.ValueBufferType=Array,Oa.prototype.DefaultInterpolation=w,Oa.prototype.InterpolantFactoryMethodLinear=void 0,Oa.prototype.InterpolantFactoryMethodSmooth=void 0;class Ba extends Pa{}Ba.prototype.ValueTypeName=\"vector\";class Ua{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=O(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Ha(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Pa.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t<r;t++){let a=[],o=[];a.push((t+r-1)%r,t,(t+1)%r),o.push(0,1,0);const l=Ea.getKeyframeOrder(a);a=Ea.sortedArray(a,1,l),o=Ea.sortedArray(o,1,l),i||0!==a[0]||(a.push(r),o.push(o[0])),s.push(new Na(\".morphTargetInfluences[\"+e[t].name+\"]\",a,o).scale(1/n))}return new this(t,-1,s)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry&&e.geometry.animations||e.animations}for(let t=0;t<n.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},r=/^([\\w-]*?)([\\d]+)$/;for(let e=0,n=t.length;e<n;e++){const n=t[e],s=n.name.match(r);if(s&&s.length>1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error(\"THREE.AnimationClip: No animation in JSONLoader data.\"),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];Ea.flattenJSON(n,s,a,i),0!==s.length&&r.push(new t(e,s,a))}},i=[],r=t.name||\"default\",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t<l.length;t++){const r=l[t].keys;if(r&&0!==r.length)if(r[0].morphTargets){const t={};let e;for(e=0;e<r.length;e++)if(r[e].morphTargets)for(let n=0;n<r[e].morphTargets.length;n++)t[r[e].morphTargets[n]]=-1;for(const n in t){const t=[],s=[];for(let i=0;i!==r[e].morphTargets.length;++i){const i=r[e];t.push(i.time),s.push(i.morphTarget===n?1:0)}i.push(new Na(\".morphTargetInfluence[\"+n+\"]\",t,s))}o=t.length*(s||1)}else{const s=\".bones[\"+e[t].name+\"]\";n(Ba,s+\".position\",r,\"pos\",i),n(Fa,s+\".quaternion\",r,\"rot\",i),n(Ba,s+\".scale\",r,\"scl\",i)}}if(0===i.length)return null;return new this(r,o,i,a)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e<this.tracks.length;e++)t=t&&this.tracks[e].validate();return t}optimize(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e<this.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function Ha(t){if(void 0===t.type)throw new Error(\"THREE.KeyframeTrack: track type undefined, can not parse\");const e=function(t){switch(t.toLowerCase()){case\"scalar\":case\"double\":case\"float\":case\"number\":case\"integer\":return Na;case\"vector\":case\"vector2\":case\"vector3\":case\"vector4\":return Ba;case\"color\":return Ia;case\"quaternion\":return Fa;case\"bool\":case\"boolean\":return Da;case\"string\":return Oa}throw new Error(\"THREE.KeyframeTrack: Unsupported typeName: \"+t)}(t.type);if(void 0===t.times){const e=[],n=[];Ea.flattenJSON(t.keys,e,n,\"value\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}const Ga={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};const ka=new class{constructor(t,e,n){const i=this;let r,s=!1,a=0,o=0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){o++,!1===s&&void 0!==i.onStart&&i.onStart(t,a,o),s=!0},this.itemEnd=function(t){a++,void 0!==i.onProgress&&i.onProgress(t,a,o),a===o&&(s=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(t){void 0!==i.onError&&i.onError(t)},this.resolveURL=function(t){return r?r(t):t},this.setURLModifier=function(t){return r=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e&&l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e<n;e+=2){const n=l[e],i=l[e+1];if(n.global&&(n.lastIndex=0),n.test(t))return i}return null}}};class Va{constructor(t){this.manager=void 0!==t?t:ka,this.crossOrigin=\"anonymous\",this.withCredentials=!1,this.path=\"\",this.resourcePath=\"\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,r){n.load(t,i,e,r)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}const Wa={};class ja extends Va{constructor(t){super(t)}load(t,e,n,i){void 0===t&&(t=\"\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=Ga.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;if(void 0!==Wa[t])return void Wa[t].push({onLoad:e,onProgress:n,onError:i});const a=t.match(/^data:(.*?)(;base64)?,(.*)$/);let o;if(a){const n=a[1],s=!!a[2];let o=a[3];o=decodeURIComponent(o),s&&(o=atob(o));try{let i;const s=(this.responseType||\"\").toLowerCase();switch(s){case\"arraybuffer\":case\"blob\":const t=new Uint8Array(o.length);for(let e=0;e<o.length;e++)t[e]=o.charCodeAt(e);i=\"blob\"===s?new Blob([t.buffer],{type:n}):t.buffer;break;case\"document\":const e=new DOMParser;i=e.parseFromString(o,n);break;case\"json\":i=JSON.parse(o);break;default:i=o}setTimeout((function(){e&&e(i),r.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}),0)}}else{Wa[t]=[],Wa[t].push({onLoad:e,onProgress:n,onError:i}),o=new XMLHttpRequest,o.open(\"GET\",t,!0),o.addEventListener(\"load\",(function(e){const n=this.response,i=Wa[t];if(delete Wa[t],200===this.status||0===this.status){0===this.status&&console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),Ga.add(t,n);for(let t=0,e=i.length;t<e;t++){const e=i[t];e.onLoad&&e.onLoad(n)}r.manager.itemEnd(t)}else{for(let t=0,n=i.length;t<n;t++){const n=i[t];n.onError&&n.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}}),!1),o.addEventListener(\"progress\",(function(e){const n=Wa[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onProgress&&i.onProgress(e)}}),!1),o.addEventListener(\"error\",(function(e){const n=Wa[t];delete Wa[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),o.addEventListener(\"abort\",(function(e){const n=Wa[t];delete Wa[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),void 0!==this.responseType&&(o.responseType=this.responseType),void 0!==this.withCredentials&&(o.withCredentials=this.withCredentials),o.overrideMimeType&&o.overrideMimeType(void 0!==this.mimeType?this.mimeType:\"text/plain\");for(const t in this.requestHeader)o.setRequestHeader(t,this.requestHeader[t]);o.send(null)}return r.manager.itemStart(t),o}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class qa extends Va{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=Ga.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"img\");function o(){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1),Ga.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1),i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}return a.addEventListener(\"load\",o,!1),a.addEventListener(\"error\",l,!1),\"data:\"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class Xa extends Va{constructor(t){super(t)}load(t,e,n,i){const r=new pn,s=new qa(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let a=0;function o(n){s.load(t[n],(function(t){r.images[n]=t,a++,6===a&&(r.needsUpdate=!0,e&&e(r))}),void 0,i)}for(let e=0;e<t.length;++e)o(e);return r}}class Ya extends Va{constructor(t){super(t)}load(t,e,n,i){const r=new X,s=new qa(this.manager);return s.setCrossOrigin(this.crossOrigin),s.setPath(this.path),s.load(t,(function(n){r.image=n;const i=t.search(/\\.jpe?g($|\\?)/i)>0||0===t.search(/^data\\:image\\/jpeg/);r.format=i?g:v,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}class Za extends Cs{constructor(){super(),this.type=\"CurvePath\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new Vs(e,t))}getPoint(t){const e=t*this.getLength(),n=this.getCurveLengths();let i=0;for(;i<n.length;){if(n[i]>=e){const t=n[i]-e,r=this.curves[i],s=r.getLength(),a=0===s?0:1-t/s;return r.getPointAt(a)}i++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n<i;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return this.autoClose&&e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,r=this.curves;i<r.length;i++){const s=r[i],a=s&&s.isEllipseCurve?2*t:s&&(s.isLineCurve||s.isLineCurve3)?1:s&&s.isSplineCurve?t*s.points.length:t,o=s.getPoints(a);for(let t=0;t<o.length;t++){const i=o[t];n&&n.equals(i)||(e.push(i),n=i)}}return this.autoClose&&e.length>1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e<n;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push((new Xs[n.type]).fromJSON(n))}return this}}class Ja extends Za{constructor(t){super(),this.type=\"Path\",this.currentPoint=new k,t&&this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e<n;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new Vs(this.currentPoint.clone(),new k(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,i){const r=new Ws(this.currentPoint.clone(),new k(t,e),new k(n,i));return this.curves.push(r),this.currentPoint.set(n,i),this}bezierCurveTo(t,e,n,i,r,s){const a=new Gs(this.currentPoint.clone(),new k(t,e),new k(n,i),new k(r,s));return this.curves.push(a),this.currentPoint.set(r,s),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new qs(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,r,s){const a=this.currentPoint.x,o=this.currentPoint.y;return this.absarc(t+a,e+o,n,i,r,s),this}absarc(t,e,n,i,r,s){return this.absellipse(t,e,n,n,i,r,s),this}ellipse(t,e,n,i,r,s,a,o){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,r,s,a,o),this}absellipse(t,e,n,i,r,s,a,o){const l=new Rs(t,e,n,i,r,s,a,o);if(this.curves.length>0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Qa extends Ja{constructor(t){super(t),this.uuid=O(),this.type=\"Shape\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n<i;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e<n;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push((new Ja).fromJSON(n))}return this}}class Ka extends ee{constructor(t,e=1){super(),this.type=\"Light\",this.color=new we(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}Ka.prototype.isLight=!0;(class extends Ka{constructor(t,e,n){super(t,n),this.type=\"HemisphereLight\",this.position.copy(ee.DefaultUp),this.updateMatrix(),this.groundColor=new we(e)}copy(t){return Ka.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}).prototype.isHemisphereLight=!0;const $a=new Rt,to=new $,eo=new $;class no{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.mapSize=new k(512,512),this.map=null,this.mapPass=null,this.matrix=new Rt,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new wn,this._frameExtents=new k(1,1),this._viewportCount=1,this._viewports=[new Z(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;to.setFromMatrixPosition(t.matrixWorld),e.position.copy(to),eo.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(eo),e.updateMatrixWorld(),$a.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix($a),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class io extends no{constructor(){super(new hn(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*F*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov&&i===e.aspect&&r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}io.prototype.isSpotLightShadow=!0;(class extends Ka{constructor(t,e,n=0,i=Math.PI/3,r=0,s=1){super(t,e),this.type=\"SpotLight\",this.position.copy(ee.DefaultUp),this.updateMatrix(),this.target=new ee,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.shadow=new io}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}).prototype.isSpotLight=!0;const ro=new Rt,so=new $,ao=new $;class oo extends no{constructor(){super(new hn(90,1,.5,500)),this._frameExtents=new k(4,2),this._viewportCount=6,this._viewports=[new Z(2,1,1,1),new Z(0,1,1,1),new Z(3,1,1,1),new Z(1,1,1,1),new Z(3,0,1,1),new Z(1,0,1,1)],this._cubeDirections=[new $(1,0,0),new $(-1,0,0),new $(0,0,1),new $(0,0,-1),new $(0,1,0),new $(0,-1,0)],this._cubeUps=[new $(0,1,0),new $(0,1,0),new $(0,1,0),new $(0,1,0),new $(0,0,1),new $(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),so.setFromMatrixPosition(t.matrixWorld),n.position.copy(so),ao.copy(n.position),ao.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(ao),n.updateMatrixWorld(),i.makeTranslation(-so.x,-so.y,-so.z),ro.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(ro)}}oo.prototype.isPointLightShadow=!0;(class extends Ka{constructor(t,e,n=0,i=1){super(t,e),this.type=\"PointLight\",this.distance=n,this.decay=i,this.shadow=new oo}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}).prototype.isPointLight=!0;class lo extends cn{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type=\"OrthographicCamera\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}lo.prototype.isOrthographicCamera=!0;class co extends no{constructor(){super(new lo(-5,5,5,-5,.5,500))}}co.prototype.isDirectionalLightShadow=!0;class ho extends Ka{constructor(t,e){super(t,e),this.type=\"DirectionalLight\",this.position.copy(ee.DefaultUp),this.updateMatrix(),this.target=new ee,this.shadow=new co}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}ho.prototype.isDirectionalLight=!0;(class extends Ka{constructor(t,e){super(t,e),this.type=\"AmbientLight\"}}).prototype.isAmbientLight=!0;(class extends Ka{constructor(t,e,n=10,i=10){super(t,e),this.type=\"RectAreaLight\",this.width=n,this.height=i}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}).prototype.isRectAreaLight=!0;class uo{constructor(){this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new $)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n<9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}uo.prototype.isSphericalHarmonics3=!0;class po extends Ka{constructor(t=new uo,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}po.prototype.isLightProbe=!0;(class extends Oe{constructor(){super(),this.type=\"InstancedBufferGeometry\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}).prototype.isInstancedBufferGeometry=!0;(class extends Te{constructor(t,e,n,i=1){\"number\"==typeof n&&(i=n,n=!1,console.error(\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\")),super(t,e,n),this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}).prototype.isInstancedBufferAttribute=!0;let mo;(class extends Va{constructor(t){super(t),\"undefined\"==typeof createImageBitmap&&console.warn(\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\"),\"undefined\"==typeof fetch&&console.warn(\"THREE.ImageBitmapLoader: fetch() not supported.\"),this.options={premultiplyAlpha:\"none\"}}setOptions(t){return this.options=t,this}load(t,e,n,i){void 0===t&&(t=\"\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=Ga.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a={};a.credentials=\"anonymous\"===this.crossOrigin?\"same-origin\":\"include\",a.headers=this.requestHeader,fetch(t,a).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:\"none\"}))})).then((function(n){Ga.add(t,n),e&&e(n),r.manager.itemEnd(t)})).catch((function(e){i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)})),r.manager.itemStart(t)}}).prototype.isImageBitmapLoader=!0;const fo=function(){return void 0===mo&&(mo=new(window.AudioContext||window.webkitAudioContext)),mo};class go extends Va{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new ja(this.manager);s.setResponseType(\"arraybuffer\"),s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{const t=n.slice(0);fo().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}}(class extends po{constructor(t,e,n=1){super(void 0,n);const i=(new we).set(t),r=(new we).set(e),s=new $(i.r,i.g,i.b),a=new $(r.r,r.g,r.b),o=Math.sqrt(Math.PI),l=o*Math.sqrt(.75);this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o),this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l)}}).prototype.isHemisphereLightProbe=!0;(class extends po{constructor(t,e=1){super(void 0,e);const n=(new we).set(t);this.sh.coefficients[0].set(n.r,n.g,n.b).multiplyScalar(2*Math.sqrt(Math.PI))}}).prototype.isAmbientLightProbe=!0;class vo{constructor(t,e,n){let i,r,s;switch(this.binding=t,this.valueSize=n,e){case\"quaternion\":i=this._slerp,r=this._slerpAdditive,s=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\"string\":case\"bool\":i=this._select,r=this._select,s=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,r=this._lerpAdditive,s=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=r,this._setIdentity=s,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,r=t*i+i;let s=this.cumulativeWeight;if(0===s){for(let t=0;t!==i;++t)n[r+t]=n[t];s=e}else{s+=e;const t=e/s;this._mixBufferRegion(n,r,0,t,i)}this.cumulativeWeight=s}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,r=this.cumulativeWeight,s=this.cumulativeWeightAdditive,a=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,r<1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-r,e)}s>0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n<e;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n<this.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,r){if(i>=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){K.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;K.multiplyQuaternionsFlat(t,s,t,e,t,n),K.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const yo=\"\\\\[\\\\]\\\\.:\\\\/\",xo=new RegExp(\"[\\\\[\\\\]\\\\.:\\\\/]\",\"g\"),_o=\"[^\\\\[\\\\]\\\\.:\\\\/]\",wo=\"[^\"+yo.replace(\"\\\\.\",\"\")+\"]\",Mo=/((?:WC+[\\/:])*)/.source.replace(\"WC\",_o),bo=/(WCOD+)?/.source.replace(\"WCOD\",wo),So=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace(\"WC\",_o),To=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace(\"WC\",_o),Eo=new RegExp(\"^\"+Mo+bo+So+To+\"$\"),Ao=[\"material\",\"materials\",\"bones\"];class Lo{constructor(t,e,n){this.path=e,this.parsedPath=n||Lo.parseTrackName(e),this.node=Lo.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new Lo.Composite(t,e,n):new Lo(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,\"_\").replace(xo,\"\")}static parseTrackName(t){const e=Eo.exec(t);if(!e)throw new Error(\"PropertyBinding: Cannot parse trackName: \"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(\".\");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Ao.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\"PropertyBinding: can not parse propertyName from trackName: \"+t);return n}static findNode(t,e){if(!e||\"\"===e||\".\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i<t.length;i++){const r=t[i];if(r.name===e||r.uuid===e)return r;const s=n(r.children);if(s)return s}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.node[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let r=e.propertyIndex;if(t||(t=Lo.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\"THREE.PropertyBinding: Trying to update node for track: \"+this.path+\" but it wasn't found.\");if(n){let i=e.objectIndex;switch(n){case\"materials\":if(!t.material)return void console.error(\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",this);if(!t.material.materials)return void console.error(\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\",this);t=t.material.materials;break;case\"bones\":if(!t.skeleton)return void console.error(\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\",this);t=t.skeleton.bones;for(let e=0;e<t.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\",this,t);t=t[i]}}const s=t[i];if(void 0===s){const n=e.nodeName;return void console.error(\"THREE.PropertyBinding: Trying to update property for track: \"+n+\".\"+i+\" but it wasn't found.\",t)}let a=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?a=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate&&(a=this.Versioning.MatrixWorldNeedsUpdate);let o=this.BindingType.Direct;if(void 0!==r){if(\"morphTargetInfluences\"===i){if(!t.geometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\",this);if(!t.geometry.isBufferGeometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\",this);if(!t.geometry.morphAttributes)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\",this);void 0!==t.morphTargetDictionary[r]&&(r=t.morphTargetDictionary[r])}o=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=r}else void 0!==s.fromArray&&void 0!==s.toArray?(o=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(o=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=i;this.getValue=this.GetterByBindingType[o],this.setValue=this.SetterByBindingTypeAndVersioning[o][a]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}Lo.Composite=class{constructor(t,e,n){const i=n||Lo.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},Lo.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Lo.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},Lo.prototype.GetterByBindingType=[Lo.prototype._getValue_direct,Lo.prototype._getValue_array,Lo.prototype._getValue_arrayElement,Lo.prototype._getValue_toArray],Lo.prototype.SetterByBindingTypeAndVersioning=[[Lo.prototype._setValue_direct,Lo.prototype._setValue_direct_setNeedsUpdate,Lo.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Lo.prototype._setValue_array,Lo.prototype._setValue_array_setNeedsUpdate,Lo.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Lo.prototype._setValue_arrayElement,Lo.prototype._setValue_arrayElement_setNeedsUpdate,Lo.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Lo.prototype._setValue_fromArray,Lo.prototype._setValue_fromArray_setNeedsUpdate,Lo.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class Co{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:S,endingEnd:S};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);break;case A:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:\"loop\",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=T,i.endingEnd=T):(i.endingStart=t?this.zeroSlopeAtStart?T:S:E,i.endingEnd=e?this.zeroSlopeAtEnd?T:S:E)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}(class extends I{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)s[t]=h;else{if(h=s[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new vo(Lo.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),s[t]=h}a[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e<this._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,r=this._actionsByClip;let s=r[e];if(void 0===s)s={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,r[e]=s;else{const e=s.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),s.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const r=t._clip.uuid,s=this._actionsByClip,a=s[r],o=a.knownActions,l=o[o.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,o[c]=l,o.pop(),t._byClipCacheIndex=null;delete a.actionByRoot[(t._localRoot||this._root).uuid],0===o.length&&delete s[r],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount&&this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,r=this._bindings;let s=i[e];void 0===s&&(s={},i[e]=s),s[n]=t,t._cacheIndex=r.length,r.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,r=n.path,s=this._bindingsByRootAndName,a=s[i],o=e[e.length-1],l=t._cacheIndex;o._cacheIndex=l,e[l]=o,e.pop(),delete a[r],0===Object.keys(a).length&&delete s[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n&&(n=new Ca(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,r=e[i];t.__cacheIndex=i,e[i]=t,r.__cacheIndex=n,e[n]=r}clipAction(t,e,n){const i=e||this._root,r=i.uuid;let s=\"string\"==typeof t?Ua.findByName(i,t):t;const a=null!==s?s.uuid:t,o=this._actionsByClip[a];let l=null;if(void 0===n&&(n=null!==s?s.blendMode:A),void 0!==o){const t=o.actionByRoot[r];if(void 0!==t&&t.blendMode===n)return t;l=o.knownActions[0],null===s&&(s=l._clip)}if(null===s)return null;const c=new Co(this,s,e,n);return this._bindAction(c,l),this._addInactiveAction(c,a,r),c}existingAction(t,e){const n=e||this._root,i=n.uuid,r=\"string\"==typeof t?Ua.findByName(n,t):t,s=r?r.uuid:t,a=this._actionsByClip[s];return void 0!==a&&a.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e>=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t<this._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,r=i[n];if(void 0!==r){const t=r.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const r=i._cacheIndex,s=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,s._cacheIndex=r,e[r]=s,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}}).prototype._controlInterpolantsResultBuffer=new Float32Array(1);(class extends Br{constructor(t,e,n=1){super(t,e),this.meshPerAttribute=n}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}}).prototype.isInstancedInterleavedBuffer=!0;(class extends ee{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}).prototype.isImmediateRenderObject=!0;const Ro=new $,Po=new Rt,Do=new Rt;function Io(t){const e=[];t&&t.isBone&&e.push(t);for(let n=0;n<t.children.length;n++)e.push.apply(e,Io(t.children[n]));return e}const No=new $;let zo,Fo;class Oo extends ee{constructor(t=new $(0,0,1),e=new $(0,0,0),n=1,i=16776960,r=.2*n,s=.2*r){super(),this.type=\"ArrowHelper\",void 0===zo&&(zo=new Oe,zo.setAttribute(\"position\",new Le([0,0,0,0,1,0],3)),Fo=new Ls(0,.5,1,5,1),Fo.translate(0,-.5,0)),this.position.copy(e),this.line=new ys(zo,new ds({color:i,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new en(Fo,new Me({color:i,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(n,r,s)}setDirection(t){if(t.y>.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{No.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(No,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}}const Bo=new Float32Array(1);new Int32Array(Bo.buffer);const Uo=new Me({side:1,depthWrite:!1,depthTest:!1});new en(new rn,Uo),Cs.create=function(t,e){return console.log(\"THREE.Curve.create() has been deprecated\"),t.prototype=Object.create(Cs.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Ja.prototype.fromPoints=function(t){return console.warn(\"THREE.Path: .fromPoints() has been renamed to .setFromPoints().\"),this.setFromPoints(t)},class extends ws{constructor(t=10,e=10,n=4473924,i=8947848){n=new we(n),i=new we(i);const r=e/2,s=t/e,a=t/2,o=[],l=[];for(let t=0,c=0,h=-a;t<=e;t++,h+=s){o.push(-a,0,h,a,0,h),o.push(h,0,-a,h,0,a);const e=t===r?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new Oe;c.setAttribute(\"position\",new Le(o,3)),c.setAttribute(\"color\",new Le(l,3));super(c,new ds({vertexColors:!0,toneMapped:!1})),this.type=\"GridHelper\"}}.prototype.setColors=function(){console.error(\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\")},class extends ws{constructor(t){const e=Io(t),n=new Oe,i=[],r=[],s=new we(0,0,1),a=new we(0,1,0);for(let t=0;t<e.length;t++){const n=e[t];n.parent&&n.parent.isBone&&(i.push(0,0,0),i.push(0,0,0),r.push(s.r,s.g,s.b),r.push(a.r,a.g,a.b))}n.setAttribute(\"position\",new Le(i,3)),n.setAttribute(\"color\",new Le(r,3));super(n,new ds({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0})),this.type=\"SkeletonHelper\",this.isSkeletonHelper=!0,this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(t){const e=this.bones,n=this.geometry,i=n.getAttribute(\"position\");Do.copy(this.root.matrixWorld).invert();for(let t=0,n=0;t<e.length;t++){const r=e[t];r.parent&&r.parent.isBone&&(Po.multiplyMatrices(Do,r.matrixWorld),Ro.setFromMatrixPosition(Po),i.setXYZ(n,Ro.x,Ro.y,Ro.z),Po.multiplyMatrices(Do,r.parent.matrixWorld),Ro.setFromMatrixPosition(Po),i.setXYZ(n+1,Ro.x,Ro.y,Ro.z),n+=2)}n.getAttribute(\"position\").needsUpdate=!0,super.updateMatrixWorld(t)}}.prototype.update=function(){console.error(\"THREE.SkeletonHelper: update() no longer needs to be called.\")},Va.prototype.extractUrlBase=function(t){return console.warn(\"THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.\"),class{static decodeText(t){if(\"undefined\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\"\";for(let n=0,i=t.length;n<i;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\"/\");return-1===e?\"./\":t.substr(0,e+1)}}.extractUrlBase(t)},Va.Handlers={add:function(){console.error(\"THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.\")},get:function(){console.error(\"THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.\")}},nt.prototype.center=function(t){return console.warn(\"THREE.Box3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},nt.prototype.empty=function(){return console.warn(\"THREE.Box3: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},nt.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},nt.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},nt.prototype.size=function(t){return console.warn(\"THREE.Box3: .size() has been renamed to .getSize().\"),this.getSize(t)},wt.prototype.empty=function(){return console.warn(\"THREE.Sphere: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},wn.prototype.setFromMatrix=function(t){return console.warn(\"THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().\"),this.setFromProjectionMatrix(t)},V.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},V.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},V.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix3: .multiplyVector3Array() has been removed.\")},V.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},V.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix3: .applyToVector3Array() has been removed.\")},V.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},Rt.prototype.extractPosition=function(t){return console.warn(\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\"),this.copyPosition(t)},Rt.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},Rt.prototype.getPosition=function(){return console.warn(\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\"),(new $).setFromMatrixColumn(this,3)},Rt.prototype.setRotationFromQuaternion=function(t){return console.warn(\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\"),this.makeRotationFromQuaternion(t)},Rt.prototype.multiplyToArray=function(){console.warn(\"THREE.Matrix4: .multiplyToArray() has been removed.\")},Rt.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Rt.prototype.multiplyVector4=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Rt.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix4: .multiplyVector3Array() has been removed.\")},Rt.prototype.rotateAxis=function(t){console.warn(\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\"),t.transformDirection(this)},Rt.prototype.crossVector=function(t){return console.warn(\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Rt.prototype.translate=function(){console.error(\"THREE.Matrix4: .translate() has been removed.\")},Rt.prototype.rotateX=function(){console.error(\"THREE.Matrix4: .rotateX() has been removed.\")},Rt.prototype.rotateY=function(){console.error(\"THREE.Matrix4: .rotateY() has been removed.\")},Rt.prototype.rotateZ=function(){console.error(\"THREE.Matrix4: .rotateZ() has been removed.\")},Rt.prototype.rotateByAxis=function(){console.error(\"THREE.Matrix4: .rotateByAxis() has been removed.\")},Rt.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Rt.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix4: .applyToVector3Array() has been removed.\")},Rt.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn(\"THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.\"),this.makePerspective(t,e,i,n,r,s)},Rt.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},yn.prototype.isIntersectionLine=function(t){return console.warn(\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\"),this.intersectsLine(t)},K.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\"),t.applyQuaternion(this)},K.prototype.inverse=function(){return console.warn(\"THREE.Quaternion: .inverse() has been renamed to invert().\"),this.invert()},Ct.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},Ct.prototype.isIntersectionPlane=function(t){return console.warn(\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\"),this.intersectsPlane(t)},Ct.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},de.prototype.area=function(){return console.warn(\"THREE.Triangle: .area() has been renamed to .getArea().\"),this.getArea()},de.prototype.barycoordFromPoint=function(t,e){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),this.getBarycoord(t,e)},de.prototype.midpoint=function(t){return console.warn(\"THREE.Triangle: .midpoint() has been renamed to .getMidpoint().\"),this.getMidpoint(t)},de.prototypenormal=function(t){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),this.getNormal(t)},de.prototype.plane=function(t){return console.warn(\"THREE.Triangle: .plane() has been renamed to .getPlane().\"),this.getPlane(t)},de.barycoordFromPoint=function(t,e,n,i,r){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),de.getBarycoord(t,e,n,i,r)},de.normal=function(t,e,n,i){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),de.getNormal(t,e,n,i)},Qa.prototype.extractAllPoints=function(t){return console.warn(\"THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.\"),this.extractPoints(t)},Qa.prototype.extrude=function(t){return console.warn(\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\"),new Ma(this,t)},Qa.prototype.makeGeometry=function(t){return console.warn(\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\"),new Sa(this,t)},k.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},k.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},k.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},$.prototype.setEulerFromRotationMatrix=function(){console.error(\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\")},$.prototype.setEulerFromQuaternion=function(){console.error(\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\")},$.prototype.getPositionFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\"),this.setFromMatrixPosition(t)},$.prototype.getScaleFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\"),this.setFromMatrixScale(t)},$.prototype.getColumnFromMatrix=function(t,e){return console.warn(\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\"),this.setFromMatrixColumn(e,t)},$.prototype.applyProjection=function(t){return console.warn(\"THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.\"),this.applyMatrix4(t)},$.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},$.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},$.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},Z.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},Z.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},ee.prototype.getChildByName=function(t){return console.warn(\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\"),this.getObjectByName(t)},ee.prototype.renderDepth=function(){console.warn(\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\")},ee.prototype.translate=function(t,e){return console.warn(\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\"),this.translateOnAxis(e,t)},ee.prototype.getWorldRotation=function(){console.error(\"THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.\")},ee.prototype.applyMatrix=function(t){return console.warn(\"THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(ee.prototype,{eulerOrder:{get:function(){return console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order},set:function(t){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order=t}},useQuaternion:{get:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")},set:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")}}}),en.prototype.setDrawMode=function(){console.error(\"THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")},Object.defineProperties(en.prototype,{drawMode:{get:function(){return console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.\"),0},set:function(){console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")}}}),os.prototype.initBones=function(){console.error(\"THREE.SkinnedMesh: initBones() has been removed.\")},hn.prototype.setLens=function(t,e){console.warn(\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\"),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(Ka.prototype,{onlyShadow:{set:function(){console.warn(\"THREE.Light: .onlyShadow has been removed.\")}},shadowCameraFov:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\"),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn(\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\"),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn(\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\"),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn(\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\"),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn(\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\"),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn(\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\"),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\"),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn(\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\")}},shadowBias:{set:function(t){console.warn(\"THREE.Light: .shadowBias is now .shadow.bias.\"),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn(\"THREE.Light: .shadowDarkness has been removed.\")}},shadowMapWidth:{set:function(t){console.warn(\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\"),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn(\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\"),this.shadow.mapSize.height=t}}}),Object.defineProperties(Te.prototype,{length:{get:function(){return console.warn(\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\"),this.array.length}},dynamic:{get:function(){return console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.usage===P},set:function(){console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.setUsage(P)}}}),Te.prototype.setDynamic=function(t){return console.warn(\"THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?P:R),this},Te.prototype.copyIndicesArray=function(){console.error(\"THREE.BufferAttribute: .copyIndicesArray() has been removed.\")},Te.prototype.setArray=function(){console.error(\"THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},Oe.prototype.addIndex=function(t){console.warn(\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\"),this.setIndex(t)},Oe.prototype.addAttribute=function(t,e){return console.warn(\"THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().\"),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?\"index\"===t?(console.warn(\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\"),this.setIndex(e),this):this.setAttribute(t,e):(console.warn(\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\"),this.setAttribute(t,new Te(arguments[1],arguments[2])))},Oe.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn(\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\"),console.warn(\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\"),this.addGroup(t,e)},Oe.prototype.clearDrawCalls=function(){console.warn(\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\"),this.clearGroups()},Oe.prototype.computeOffsets=function(){console.warn(\"THREE.BufferGeometry: .computeOffsets() has been removed.\")},Oe.prototype.removeAttribute=function(t){return console.warn(\"THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().\"),this.deleteAttribute(t)},Oe.prototype.applyMatrix=function(t){return console.warn(\"THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(Oe.prototype,{drawcalls:{get:function(){return console.error(\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\"),this.groups}},offsets:{get:function(){return console.warn(\"THREE.BufferGeometry: .offsets has been renamed to .groups.\"),this.groups}}}),Br.prototype.setDynamic=function(t){return console.warn(\"THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?P:R),this},Br.prototype.setArray=function(){console.error(\"THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},Ma.prototype.getArrays=function(){console.error(\"THREE.ExtrudeGeometry: .getArrays() has been removed.\")},Ma.prototype.addShapeList=function(){console.error(\"THREE.ExtrudeGeometry: .addShapeList() has been removed.\")},Ma.prototype.addShape=function(){console.error(\"THREE.ExtrudeGeometry: .addShape() has been removed.\")},Or.prototype.dispose=function(){console.error(\"THREE.Scene: .dispose() has been removed.\")},Object.defineProperties(me.prototype,{wrapAround:{get:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")},set:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")}},overdraw:{get:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")},set:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")}},wrapRGB:{get:function(){return console.warn(\"THREE.Material: .wrapRGB has been removed.\"),new we}},shading:{get:function(){console.error(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\")},set:function(t){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask},set:function(t){console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask=t}}}),Object.defineProperties(ln.prototype,{derivatives:{get:function(){return console.warn(\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives},set:function(t){console.warn(\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives=t}}}),Fr.prototype.clearTarget=function(t,e,n,i){console.warn(\"THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.\"),this.setRenderTarget(t),this.clear(e,n,i)},Fr.prototype.animate=function(t){console.warn(\"THREE.WebGLRenderer: .animate() is now .setAnimationLoop().\"),this.setAnimationLoop(t)},Fr.prototype.getCurrentRenderTarget=function(){return console.warn(\"THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().\"),this.getRenderTarget()},Fr.prototype.getMaxAnisotropy=function(){return console.warn(\"THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().\"),this.capabilities.getMaxAnisotropy()},Fr.prototype.getPrecision=function(){return console.warn(\"THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.\"),this.capabilities.precision},Fr.prototype.resetGLState=function(){return console.warn(\"THREE.WebGLRenderer: .resetGLState() is now .state.reset().\"),this.state.reset()},Fr.prototype.supportsFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\"),this.extensions.get(\"OES_texture_float\")},Fr.prototype.supportsHalfFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\"),this.extensions.get(\"OES_texture_half_float\")},Fr.prototype.supportsStandardDerivatives=function(){return console.warn(\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\"),this.extensions.get(\"OES_standard_derivatives\")},Fr.prototype.supportsCompressedTextureS3TC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_s3tc\")},Fr.prototype.supportsCompressedTexturePVRTC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_pvrtc\")},Fr.prototype.supportsBlendMinMax=function(){return console.warn(\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\"),this.extensions.get(\"EXT_blend_minmax\")},Fr.prototype.supportsVertexTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\"),this.capabilities.vertexTextures},Fr.prototype.supportsInstancedArrays=function(){return console.warn(\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\"),this.extensions.get(\"ANGLE_instanced_arrays\")},Fr.prototype.enableScissorTest=function(t){console.warn(\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\"),this.setScissorTest(t)},Fr.prototype.initMaterial=function(){console.warn(\"THREE.WebGLRenderer: .initMaterial() has been removed.\")},Fr.prototype.addPrePlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\")},Fr.prototype.addPostPlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\")},Fr.prototype.updateShadowMap=function(){console.warn(\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\")},Fr.prototype.setFaceCulling=function(){console.warn(\"THREE.WebGLRenderer: .setFaceCulling() has been removed.\")},Fr.prototype.allocTextureUnit=function(){console.warn(\"THREE.WebGLRenderer: .allocTextureUnit() has been removed.\")},Fr.prototype.setTexture=function(){console.warn(\"THREE.WebGLRenderer: .setTexture() has been removed.\")},Fr.prototype.setTexture2D=function(){console.warn(\"THREE.WebGLRenderer: .setTexture2D() has been removed.\")},Fr.prototype.setTextureCube=function(){console.warn(\"THREE.WebGLRenderer: .setTextureCube() has been removed.\")},Fr.prototype.getActiveMipMapLevel=function(){return console.warn(\"THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().\"),this.getActiveMipmapLevel()},Object.defineProperties(Fr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\"),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\"),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")}},context:{get:function(){return console.warn(\"THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.\"),this.getContext()}},vr:{get:function(){return console.warn(\"THREE.WebGLRenderer: .vr has been renamed to .xr\"),this.xr}},gammaInput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\"),!1},set:function(){console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\")}},gammaOutput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),!1},set:function(t){console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),this.outputEncoding=!0===t?3001:L}},toneMappingWhitePoint:{get:function(){return console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\"),1},set:function(){console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\")}}}),Object.defineProperties(Er.prototype,{cullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")}},renderReverseSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")}},renderSingleSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")}}}),Object.defineProperties(J.prototype,{wrapS:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy=t}},offset:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset=t}},repeat:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat=t}},format:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format=t}},type:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps=t}}}),class extends ee{constructor(t){super(),this.type=\"Audio\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\"empty\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"audioNode\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaNode\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaStreamNode\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\"buffer\",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\"THREE.Audio: Audio is already playing.\");if(!1===this.hasPlaybackControl)return void console.warn(\"THREE.Audio: this Audio has no playback control.\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\"THREE.Audio: this Audio has no playback control.\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}.prototype.load=function(t){console.warn(\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\");const e=this;return(new go).load(t,(function(t){e.setBuffer(t)})),this},dn.prototype.updateCubeMap=function(t,e){return console.warn(\"THREE.CubeCamera: .updateCubeMap() is now .update().\"),this.update(t,e)},dn.prototype.clear=function(t,e,n,i){return console.warn(\"THREE.CubeCamera: .clear() is now .renderTarget.clear().\"),this.renderTarget.clear(t,e,n,i)},j.crossOrigin=void 0,j.loadTexture=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\");const r=new Ya;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},j.loadTextureCube=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\");const r=new Xa;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},j.loadCompressedTexture=function(){console.error(\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\")},j.loadCompressedTextureCube=function(){console.error(\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\")},\"undefined\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"register\",{detail:{revision:\"130\"}})),\"undefined\"!=typeof window&&(window.__THREE__?console.warn(\"WARNING: Multiple instances of Three.js being imported.\"):window.__THREE__=\"130\");var Ho=[\"C\",\"C#\",\"D\",\"Eb\",\"E\",\"F\",\"F#\",\"G\",\"G#\",\"A\",\"Bb\",\"B\"],Go=1024,ko=new n(Go),Vo=new Or,Wo=new hn(40,1.6,.1,1e3),jo=new ds({color:65280});new ds({color:65535});var qo=function(t,e){for(var n=[],i=0;i<t;i++)n.push(Array.apply(null,Array(e)).map(Number.prototype.valueOf,0));return n}(20,Go),Xo=new Fr({canvas:document.querySelector(\"canvas\")});function Yo(){Xo.domElement.style.width=\"100%\",Xo.domElement.style.height=\"auto\";var t=Xo.domElement.clientWidth/16*10;Xo.setPixelRatio(window.devicePixelRatio?window.devicePixelRatio:1),Xo.setSize(1.6*t,t),Xo.domElement.style.width=\"100%\",Xo.domElement.style.height=\"auto\",Wo.aspect=1.6*t/t,Wo.updateProjectionMatrix()}Yo(),window.addEventListener(\"resize\",Yo);var Zo=new ho(16777215,.5);Zo.position.set(0,1,1),Vo.add(Zo),Wo.position.z=5;var Jo=new $(0,1,0),Qo=new $(1,0,0),Ko=new $(1,-6,-15),$o=new Oo(Jo,Ko,1,16776960),tl=new Oo(Jo,Ko,1,255),el=new Oo(Qo,Ko,1,16711935),nl=new Pr;Vo.add($o),Vo.add(tl),Vo.add(el);for(var il=0;il<qo.length;il++)if(qo[il]){var rl=new Oe,sl=new Float32Array(3*qo[il].length);rl.addAttribute(\"position\",new Te(sl,3)),rl.setDrawRange(0,qo[il].length);var al=new ys(rl,jo);nl.add(al),sl=al.geometry.attributes.position.array}var ol=new Oe,ll=new ys(ol,jo);sl=new Float32Array(3072);ol.addAttribute(\"position\",new Te(sl,3)),ol.setDrawRange(0,Go),sl=ll.geometry.attributes.position.array,Vo.add(ll),Vo.add(nl);var cl=null,hl=document.querySelector(\"#chroma\"),ul=document.querySelector(\"#mfcc\");!function t(){if(cl=ko.get([\"amplitudeSpectrum\",\"spectralCentroid\",\"spectralRolloff\",\"loudness\",\"rms\",\"chroma\",\"mfcc\"])){hl&&cl.chroma&&(hl.innerHTML=cl.chroma.reduce((function(t,e,n){return t+'\\n          <div class=\"chroma-band\" style=\"background-color: rgba(0,'+Math.round(255*e)+',0,1)\">'+Ho[n]+\"</div>\"}),\"\")),ul&&cl.mfcc&&(ul.innerHTML=cl.mfcc.reduce((function(t,e,n){return t+'\\n          <div class=\"mfcc-band\" style=\"background-color: rgba(0,'+5*Math.round(e+25)+',0,1)\">'+n+\"</div>\"}),\"\")),qo.pop(),qo.unshift(cl.amplitudeSpectrum);for(var e=ko.meyda._m.signal,n=0;n<qo.length;n++){for(var i=nl.children[n].geometry.attributes.position.array,r=0,s=0;s<3*qo[n].length;s++)i[r++]=10.7+8*Math.log10(s/qo[n].length),i[r++]=.1*qo[n][s]-5,i[r++]=-15-n;nl.children[n].geometry.attributes.position.needsUpdate=!0}if(cl.spectralCentroid&&$o.position.set(10.7+8*Math.log10(cl.spectralCentroid/512),-6,-15),cl.spectralRolloff){var a=cl.spectralRolloff/22050;tl.position.set(10.7+8*Math.log10(a),-6,-15)}if(cl.rms&&el.position.set(-11,10*cl.rms-5,-15),e){for(var o=ll.geometry.attributes.position.array,l=0,c=0;c<Go;c++)o[l++]=22*c/Go-11,o[l++]=4+5*e[c],o[l++]=-25;ll.geometry.attributes.position.needsUpdate=!0}}requestAnimationFrame(t),Xo.render(Vo,Wo)}()}();\n"
  },
  {
    "path": "docs/audio-features.md",
    "content": "---\nlayout: default\n---\n\n## What is an Audio Feature?\n\nOften, observing and analysing an audio signal as a waveform doesn't provide us a lot of information about its contents. An audio feature is a measurement of a particular characteristic of an audio signal, and it gives us insight into what the signal contains. Audio features can be measured by running an algorithm on an audio signal that will return a number, or a set of numbers that quantify the characteristic that the specific algorithm is intended to measure. Meyda implements a selection of standardized audio features that are used widely across a variety of music computing scenarios.\n\nBear in mind that by default, Meyda.extract applies a windowing function to the incoming signal using the hanning windowing function by default. If you compare the results of Meyda's feature extraction to that of another library for the same signal, make sure that the same windowing is being applied, or the features will likely differ. To disable windowing in Meyda.extract, set Meyda.windowingFunction to 'rect'.\n\n_Following is a list of supported features with their explanations. Unless stated otherwise, extraction algorithms have been adapted from the [yaafe](http://yaafe.sourceforge.net) library._\n\n<br>\n\n## Time-domain features\n\n### RMS\n\n`rms`\n\n- _Description_: The root mean square of the waveform, that corresponds to its loudness. Corresponds to the ‘Energy’ feature in YAAFE, adapted from Loy’s Musimathics [1].\n- _What Is It Used For_: Getting a rough idea about the loudness of a signal.\n- _Range_: RMS is a positive floating point number, bound only by the length and volume of the input signal. For more information, check out [the wikipedia entry](https://en.wikipedia.org/wiki/Root_mean_square).\n\nTo use RMS in applications where you expect a ceiling on each audio feature, we suggest that you measure examples of audio that you will run feature extraction on, identify a reasonable \"maximum\" to clamp your max to, and apply the Math.min function to take either the current value of rms, or your maximum threshold, whichever is lower.\n\n### ZCR\n\n`zcr`\n\n- _Description_: The number of times that the signal crosses the zero value in the buffer.\n- _What Is It Used For_: Helps differentiating between percussive and pitched sounds. Percussive sounds will have a random ZCR across buffers, where pitched sounds will return a more constant value.\n- _Range_: 0 - ((buffer size / 2) - 1). In Meyda, the default buffer size (`bufferSize`) is 512 and therefore the default ZCR range is `0 - 255`.\n\n### Energy\n\n`energy`\n\n- _Description_: The infinite integral of the squared signal. According to Lathi [2].\n- _What Is It Used For_: This is another indicator to the loudness of the signal.\n- _Range_: 0 - `bufferSize`, where `0.0` is very quiet and `bufferSize` is very loud.\n\n<br>\n\n## Spectral Features\n\n### AmplitudeSpectrum\n\n`amplitudeSpectrum`\n\n- _Description_: This is also known as the magnitude spectrum. By calculating the Fast Fourier Transform (FFT), we get the signal represented in the frequency domain. The output is an array, where each index is a frequency bin (i.e. containing information about a range of frequencies) containing a complex value (real and imaginary). The amplitude spectrum takes this complex array and computes the amplitude of each index. The result is the distribution of frequencies in the signal along with their corresponding strength. If you want to learn more about Fourier Transform, and the differences between time-domain to frequency-domain analysis, [this article][mathworks-fourier] is a good place to start.\n- _What Is It Used For_: Very useful for any sort of audio analysis. In fact, many of the features extracted in Meyda are based on this :).\n- _Range_: An array half the size of the FFT, containing information about frequencies between 0 - half of the sampling rate. In Meyda the default sampling rate (`sampleRate`) is 44100Hz and the FFT size is equal to the buffer size (`bufferSize`) - with a default of 512.\n\n### Power Spectrum\n\n`powerSpectrum`\n\n- _Description_: This is the `amplitudeSpectrum` squared.\n- _What Is It Used For_: This better emphasizes the differences between frequency bins, compared to the amplitude spectrum.\n- _Range_: An array half the size of the FFT, containing information about between frequencies 0 - half of the sampling rate. In Meyda the default sampling rate (`sampleRate`) is 44100Hz and the FFT size is equal to the buffer size (`bufferSize`) - with a default of 512.\n\n### Spectral Centroid\n\n`spectralCentroid`\n\n- _Description_: An indicator of the \"brightness\" of a given sound, representing the spectral centre of gravity. If you were to take the spectrum, make a wooden block out of it and try to balance it on your finger (across the X axis), the spectral centroid would be the frequency that your finger \"touches\" when it successfully balances.\n- _What Is It Used For_: As mentioned, it's quantifying the \"brightness\" of a sound. This can be used for example to classify a bass guitar (low spectral centroid) from a trumpet (high spectral centroid).\n- _Range_: 0 - half of the FFT size. In Meyda the FFT size is equal to the buffer size (`bufferSize`) - with a default of 512.\n\n### Spectral Flatness\n\n`spectralFlatness`\n\n- _Description_: The flatness of the spectrum. It is computed using the ratio between the geometric and arithmetic means.\n- _What Is It Used For_: Determining how noisy a sound is. For example a pure sine wave will have a flatness that approaches `0.0`, and white noise will have a flatness that approaches `1.0`.\n- _Range_: `0.0 - 1.0` where `0.0` is not flat and `1.0` is very flat.\n\n### Spectral Flux\n\n`spectralFlux`\n\n- _Description_: A measure of how quickly the spectrum of a signal is changing. It is calculated by computing the difference between the current spectrum and that of the previous frame.\n- _What Is It Used For_: Often corresponds to perceptual \"roughness\" of a sound. Can be used for example, to determine the timbre of a sound.\n- _Range_: Starts at `0.0`. This has no upper range as it depends on the input signal.\n\n### Spectral Slope\n\n`spectralSlope`\n\n- _Description_: A measure of how ‘inclined’ the shape of the spectrum is. Calculated by performing linear regression on the amplitude spectrum.\n- _What Is It Used For_: Can be used to differentiate between different voice qualities, such as hissing, breathing and regular speech. Closely relates to spectral centroid and spectral rolloff.\n- _Range_: `0.0 - 1.0`\n\n### Spectral Rolloff\n\n`spectralRolloff`\n\n- _Description_: The frequency below which is contained 99% of the energy of the spectrum.\n- _What Is It Used For_: Can be used to approximate the maximum frequency in a signal.\n- _Range_: 0 - half of the sampling rate. In Meyda the default sampling rate (`sampleRate`) is 44100Hz.\n\n### Spectral Spread\n\n`spectralSpread`\n\n- _Description_: Indicates how spread the frequency content is across the spectrum. Corresponds with the frequency bandwidth.\n- _What Is It Used For_: Can be used to differentiate between noisy (high spectral spread) and pitched sounds (low spectral spread).\n- _Range_: 0 - half of the FFT size. In Meyda the FFT size is equal to the buffer size (`bufferSize`) - with a default of 512.\n\n### Spectral Skewness\n\n`spectralSkewness`\n\n- _Description_: Indicates whether or not the spectrum is skewed towards a particular range of values, relative to its mean.\n- _What Is It Used For_: Often used to get an idea about the timbre of a sound.\n- _Range_: Could be negative, positive, or 0. Where 0 is symmetric about the mean, negative indicates that the frequency content is skewed towards the right of the mean, and positive indicates that the frequency content is skewed towards the left of the mean.\n\n### Spectral Kurtosis\n\n`spectralKurtosis`\n\n- _Description_: An indicator to how pointy the spectrum is. Can be viewed as the opposite of Spectral Flatness.\n- _What Is It Used For_: Often used to indicate \"pitchiness / tonality\" of a sound.\n- _Range_: `0.0 - 1.0`, where `0.0` is not tonal, and `1.0` is very tonal.\n\n### Spectral Crest\n\n`spectralCrest`\n\n- _Description_: This is the ratio of the loudest magnitude over the RMS of the whole frame. A high number is an indication of a loud peak compared out to the overall curve of the spectrum.\n- _What Is It Used For_: If the spectrum you are analysing has peaks in it, it can help discern _how peaky_ it is.\n- _Range_: The range is arbitrary, with higher values indicating more extreme peaks in the spectrum.\n\n### Chroma\n\n`chroma`\n\n- _Description_: Calculates the how much of each chromatic pitch class (C, C♯, D, D♯, E, F, F♯, G, G♯, A, A♯, B) exists in the signal.\n- _What Is It Used For_: Often used to analyse the harmonic content of recorded music, such as in chord or key detection.\n- _Range_: `0.0 - 1.0` for each pitch class.\n\n<br>\n\n## Perceptual features\n\n### Loudness\n\n`loudness`\n\n- _Description_: Humans' perception of frequency is non-linear. The [Bark Scale][wikipedia-bark] was developed in order to have a scale on which equal distances correspond to equal distances of frequency perception. This feature outputs an object with two values:\n  - The loudness of the input sound on each step (often referred to as bands) of this scale (`.specific`). There are 24 bands overall.\n  - Total Loudness (`.total`), which is a sum of the 24 `.specific` loudness coefficients.\n- _What Is It Used For_: Can be used to construct filters that better correspond with the human perception of loudness.\n- _Range_: The loudness feature extractor uses a normalised spectrum to calculate the individual bark band energies, but the energies themselves are not normalised afterwards. If we were to normalize to the loudest possible sound, we would squash the range such that quiet values lose fidelity. Therefore, we leave normalization of this feature to the consumer of the value, since normalization approach depends on the use case. Realtime audio visualisers, for example, may choose to store the \"loudest yet seen\" value and normalize to that, whereas systems that are extracting audio features over a large corpus of audio will likely need a shared reference point for normalization, and should pick one suitable for their use case and dataset. Make sure you remember your normalization value and method though! We recommend experimenting and seeing what works for your use case. If you have ideas for how to improve the loudness feature, or any others, please [let us know].\n\n### Perceptual Spread\n\n`perceptualSpread`\n\n- _Description_: Computes the spread of the `.specific` loudness coefficients, over the bark scale.\n- _What Is It Used For_: An indicator of how \"rich / full\" a sound will be perceived.\n- _Range_: `0.0 - 1.0` where `0.0` is not \"rich\" and `1.0` is very \"rich\".\n\n### Perceptual Sharpness\n\n`perceptualSharpness`\n\n- _Description_: Perceived \"sharpness\" of a sound, based the Bark loudness coefficients.\n- _What Is It Used For_: Detecting if an input sound is perceived as \"sharp\". Can be used, for example, for differentiating between snare-drum and bass-drum sounds.\n- _Range_: `0.0 - 1.0` where `0.0` is not \"sharp\" (e.g. bass-drum) and `1.0` very sharp (e.g. snare-drum).\n\n### Mel-Frequency Cepstral Coefficients\n\n`mfcc`\n\n- _Description_: As humans don't interpret pitch in a linear manner, various scales of frequencies were devised to represent the way humans hear the distances between pitches. The [Mel scale][wikipedia-mel] is one of them, and it is now widely used for voice-related applications. The Meyda implementation was inspired by Huang [3], Davis [4], Grierson [5] and the [librosa](https://github.com/bmcfee/librosa) library.\n- _What Is It Used For_: Often used to perform voice activity detection (VAD) prior to automatic speech recognition (ASR).\n- _Range_: An array of values representing the intensity for each Mel band. The default size of the array is 13, but is configureable via `numberOfMFCCCoefficients`.\n\n<br>\n\n## Utility extractors\n\n### Complex Spectrum\n\n`complexSpectrum`\n\n- _Description_: An array of complex values (`ComplexArray`) containing both the real and the imaginary parts of the FFT.\n- _What Is It Used For_: To create the `amplitudeSpectrum`. It is also used to do further signal processing, as it contains information about both the frequency the phase of the signal.\n- _Range_: An array half the size of the FFT, containing information about frequencies 0 - half of the sampling rate, and their corresponding phase values. In Meyda the default sampling rate (`sampleRate`) is 44100Hz and the FFT size is equal to the buffer size (`bufferSize`) - with a default of 512.\n\n### Buffer\n\n`buffer`\n\n- _Description_: This is the raw audio that you get when reading an input from a microphone, a wav file, or any other input audio. It is encoded as a `Float32Array`.\n- _What Is It Used For_: All of the time-domain features in Meyda are extracted from this buffer. You can also use that to visualise the audio waveform.\n- _Range_: An array of size `bufferSize`, where each value can range between `-1.0 - 1.0`.\n\n<br>\n\n## Windowing functions\n\nWindowing functions are used during the conversion of a signal from the time domain (i.e. air pressure over time) to the frequency domain (the phase and intensity of each sine wave that comprises the signal); a prerequisite for many of the audio features described above. Windowing functions generate an envelope of numbers between 0 and 1, and multiply these numbers pointwise with each sample in the signal buffer, making the samples at the middle of the buffer relatively louder, and making the samples at either end of the buffer relatively quieter. This smooths out the result of the conversion to the frequency domain, which makes the final audio features more consistent and less jittery.\n\nMeyda supports 4 windowing functions, each with different characteristics. For more information on windowing, please consult [this article][wikipedia-windowing]. By default, Meyda applies the hanning window, not the rectangular window, to signals before converting them into the frequency domain.\n\n### Hanning\n\n`Meyda.windowing(signalToBeWindowed, \"hanning\");`\n\n### Hamming\n\n`Meyda.windowing(signalToBeWindowed, \"hamming\");`\n\n### Blackman\n\n`Meyda.windowing(signalToBeWindowed, \"blackman\");`\n\n### Sine\n\n`Meyda.windowing(signalToBeWindowed, \"sine\");`\n\n### Rectangular (no window)\n\n`Meyda.windowing(signalToBeWindowed, \"rect\");`\n\n<br>\n<br>\n\n---\n\n[1] G. Loy, Musimathics: _The Mathematical Foundations of Music_, Volume 1. The MIT Press, 2006.\n\n[2] B. P. Lathi, _Modern Digital and Analog Communication Systems_ 3e Osece. Oxford University Press, 3rd ed., 1998.\n\n[3] X. Huang, A. Acero, and H.-W. Hon, _Spoken Language Processing: A Guide to Theory, Algorithm, and System Development._ Upper Saddle River, NJ, USA: Prentice Hall PTR, 1st ed., 2001.\n\n[4] S. Davis and P. Mermelstein, “Comparison of parametric representations for monosyllabic word recognition in continuously spoken sentences,” _Acoustics, Speech and Signal Processing, IEEE Transactions on_, vol. 28, pp. 357–366, Aug 1980.\n\n[5] M. Grierson, “Maximilian: A cross platform c++ audio synthesis library for artists learning to program.,” in _Proceedings of International Computer Music Conference,_ 2010.\n\n[wikipedia-windowing]: https://en.wikipedia.org/wiki/Window_function\n[wikipedia-mel]: https://en.wikipedia.org/wiki/Mel_scale\n[wikipedia-bark]: https://en.wikipedia.org/wiki/Bark_scale\n[mathworks-fourier]: https://www.mathworks.com/help/signal/examples/practical-introduction-to-frequency-domain-analysis.html\n[let us know]: https://github.com/meyda/meyda/issues\n"
  },
  {
    "path": "docs/getting-started.md",
    "content": "---\nlayout: default\n---\n\n# Getting Started\n\nMeyda is a Javascript Library that can listen to audio and output a selection of\nstatistics that describe it. Meyda has a variety of different applications, and\nenvironments it can be used in. Lets take a look at some.\n\n## What can you do with Meyda?\n\nYou can get audio analysis of\n\n- Audio playing in real time in your browser\n- Audio that's stored in buffers or arrays in your browser\n- Audio that's stored on disk as a wav file\n- Audio that you've loaded in Node.js\n\nYou can use these analyses in\n\n- Real Time Audio Visualizations\n- Machine Learning\n- Visual Score Generation\n- Music Recommendation\n- ...and anything else you can think of!\n\n## What's in these audio analyses?\n\nMeyda can calculate a wide variety of standard audio features, including\nloudness, spectral characteristics like brightness (spectral centroid) and\nnoisiness (flatness) and much more. For a full list and explanation of the audio\nfeatures Meyda supports, please see [our audio feature reference document]\n[audio-features].\n\n## Installation\n\nTo install Meyda in a modern frontend project, use `npm`:\n\n`npm install --save meyda`\n\nFor web use cases, Meyda bundles a browserified copy of itself that exposes a\n`Meyda` object on the `window` object. This can be used in situations where npm\nis not in use, and you need to include a html link to your dependency, like the\njQuery days. To add Meyda to your web page, you can load it via [unpkg] as\nfollows:\n\n```html\n<script type=\"text/javascript\" src=\"https://unpkg.com/meyda@<VERSION>/dist/web/meyda.min.js\">\n```\n\nHowever, we recommend using npm to install Meyda where possible to avoid\nsecurity issues, including Content Security Policy headers on your own site to\nallow Javascript sources from unpkg, and using [subresource integrity] to ensure\nthe integrity of the installed script.\n\n### Typescript support\n\nType definitions are available in Meyda and are managed in the [DefinitelyTyped repository][typesource]. To get code completion in your IDE and type checking at compile time, install the [@types/meyda] package from npm alongside Meyda.\n\n```\nnpm install --save @types/meyda\n```\n\n## How can you do these things with Meyda?\n\nPlease have a look through the following tutorials for the one that closest\nmatches your needs.\n\n- [Real-time audio feature extraction in the browser][online-web-audio]\n- [Offline audio feature extraction on the command line][offline-cli]\n- [Audio feature extraction in Node JS][offline-node]\n\n## Need more help?\n\nCan't find a tutorial that matches up with what you're trying to do with Meyda?\nNot finding the documentation to be clear enough? Please open a [GitHub Issue]\n[new-issue], and we'll do our best to help.\n\n[audio-features]: /audio-features\n[new-issue]: https://github.com/meyda/meyda/issues/new\n[online-web-audio]: /guides/online-web-audio\n[offline-cli]: /guides/offline-cli\n[offline-node]: /guides/offline-node\n[unpkg]: https://unpkg.com\n[subresource integrity]: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity\n[typesource]: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/meyda\n[@types/meyda]: https://www.npmjs.com/package/@types/meyda\n"
  },
  {
    "path": "docs/guides/contributing.md",
    "content": "---\nlayout: default\n---\n\nWe welcome any and all contributions to Meyda, including filing issues, feature requests, pull requests, feedback, and any other comments. Please familiarise yourself with our [Contributor Covenant](https://github.com/hughrawlinson/meyda/wiki/Contributor-Covenant). The core contributors are quite limited on time, so we'd really appreciate if you could stick to the following few rules:\n\n### Filing issues\n\n- Bug reports\n  - Please include comprehensive instructions for us to reproduce the bug. If you can include the source, please do.\n  - If you have the time, please consider finding the problem within Meyda yourself, and if you're feeling generous have a go at fixing it and submitting a pull request.\n- Feature requests\n  - Keep in mind that the core contributors are not full time Meyda developers.\n  - If there's a feature you really want that we don't yet support, please consider implementing it yourself and submitting a pull request.\n\n### Pull Requests\n\n- Please try and stick to a similar coding style to what currently exists.\n- Make sure your change is covered by tests.\n- If you have to make an implementation decision, feel free to ask us for our input by opening an issue on the repository. This may save time in code review.\n- Bear in mind that we're not working on Meyda full time, so it may take us a while to review your code.\n- Your commit messages should adhere to the [conventional commits] standard. We recommend using [commitizen] to make standard compliant commit messages.\n\n### Conventional Commits\n\nUsing conventional commits has proven to add quite a lot of overhead for external contributors, and we're sorry about that.\nThe reason that we use conventional commits is so that we can automate meyda releases using semantic release, and so that it's\nreally clear from the git log which commits contain changes that are considered fixes, new features, or breaking changes, which\nis crucial to know in a semantically versioned project.\n\nSome pitfalls some run into are documented [here](https://www.hughrawlinson.me/posts/2020/05/17/avoiding-pitfalls-when-installing-semantic-release-for-npm-library-packages). And remember: the top line description of a commit message should be in all lower case.\n\nWe hope to have better PR feedback on commit messages in the future - and if possible a bot that will just lint and fix any\nminor errors. Follow along [on this issue](https://github.com/meyda/meyda/issues/347).\n\n### Build the project\n\n1. Remember to do it.\n2. `npm run default`\n3. This will run tests, so make sure they all pass and try and make sure any new code you're submitting is covered properly.\n\n[conventional commits]: https://www.conventionalcommits.org/en/v1.0.0/#summary\n[commitizen]: https://github.com/commitizen/cz-cli\n"
  },
  {
    "path": "docs/guides/offline-cli.md",
    "content": "---\nlayout: default\n---\n\nIn this guide, we'll learn how to use Meyda's command line interface to perform\noffline audio feature extraction on a file on disk.\n\nThe difference between online and offline audio feature extraction is that while\nonline audio feature extraction happens in \"real time\", while audio is being\ngenerated (possibly from a microphone, or other input device), offline audio\nfeature extraction can be run when the audio is already generated. As a result,\nit can run much faster than real time, because it doesn't need to wait for the\naudio to be generated, and can run through an audio signal much faster than a\nhuman could listen to it.\n\nWhy might it be useful to perform offline audio feature extraction on a file on\ndisk? One straightforward use case is if you imagine that you have a large bank\nof audio samples, and you need to know the audio features of each one, so that\nyou can build a web app that plots these samples based on their audio features.\nYou wouldn't want to load each sample over the wire and then run offline audio\nfeature extraction on each one, because that would take a lot of time, delay the\nloading of your page for your user, and waste a lot of their bandwidth. Instead,\nyou could run offline audio feature extraction in advance, save the results, and\nload the results into your web page each time. That would be much faster.\n\nTo call Meyda's command line interface, we first need to install the Meyda\npackage globally, using npm.\n\n```sh\n$ npm install --global meyda\n```\n\nOnce that command has run, the Meyda executable should be available on your\npath. You can test this by running `meyda --help` as shown below. You should\nexpect the same usage information to print to your console before `meyda` exits.\n\n```\n$ meyda --help\nUsage: node meyda\n\n      --o[=OUTPUT_FILE]         Path to output file (optional, if not specified prints to console\n      --bs[=BUFFER_SIZE]        Buffer size in samples (optional, default is 512)\n      --hs[=HOP_SIZE]           Hop size in samples (optional, defaults to matching buffer size)\n      --w[=WINDOWING_FUNCTION]  Windowing function (optional, default is hanning)\n      --format[=FORMAT_TYPE]    Type of output file (optional, default is csv)\n  -p                            Disables some of the logging and outputs data to stdout, useful for piping\n  -h, --help                    Display help\n```\n\nMeyda's command line interface only supports wav files, but you can use any of a\nvariety of free utilities to convert audio from your source format into wav. We\nrecommend [ffmpeg][ffmpeg-audio-conversion]. Meyda only supports feature\nextraction on a single channel. When Meyda receives a multi-channel signal, it\nwill run feature extraction on the first channel. If you need to get the audio\nfeatures of a multi-channel audio file, you can use ffmpeg to [split a\nmulti-channel file into multiple single-channel files][ffmpeg-channel-split].\n\nLets run Meyda on a file.\n\n```\n$ meyda [input audio file] [audio features]\n```\n\nWhen all is said and done, Meyda should have printed a list of audio features,\none per buffer of audio in your file. What happens under the hood is that when\nMeyda extracts audio features on a file, it chops the file up into many arrays\ncalled buffers, each of the same length (this length is called the \"buffer size\"\n). Then, it runs the feature extraction on each of these buffers, and prints the\nresults to your terminal. At the end of the results, it prints the average\nvalue for the audio feature across all of the buffers. Here is some example\noutput:\n\n```\n$ meyda $AUDIO_FILE zcr rms\n...\n0.09969931883890712\n0.09855015035449391\n0.034916217344244806\n0.10669681790881183\n0.08063935874077789\n0.12053331333721143\n0.00011213407113325301\n\nAverage zcr: 143.96319018404907\nAverage rms: 0.04044172219461247\n```\n\nIn our sample plot website use-case described above, this is the stage at which\nyou run Meyda against each of your audio files, and store the results in a\nformat that's useful to you, perhaps in a database, or as a static file. You\nmight use a bash loop to run meyda against every file in your collection, like\nso:\n\n```\nfor AUDIO_FILE in $( ls ./samples_directory ); do\n  meyda $AUDIO_FILE zcr rms >> ./results_directory/$AUDIO_FILE_features.txt\ndone;\n```\n\nIs offline audio feature extraction only possible using Meyda's command line\ninterface? No. For one thing, many other libraries and tools can run audio\nfeature extraction, such as [YAAFE][yaafe] a c library and [librosa][librosa], a\npython library. Meyda's audio feature extractors can be run on arbitrary signals\nin Node.js or in the browser, and Meyda is fully compatible with the Web Audio\nAPI's [offline audio context][offlineaudiocontext].\n\nGreat! Now you know how to, and why you might want to use Meyda's command line\ninterface to run offline audio feature extraction against audio files. You've\nlearned the difference between online and offline feature extraction, and you've\nlearned about some situations in which offline feature extraction can be useful.\nYou've even learned about some other audio feature extraction libraries that may\nbe useful to you.\n\nNext, why don't you check out our [audio feature reference]\n[audio-feature-reference] to learn about the various audio features that Meyda\ncan extract?\n\n[librosa]: https://librosa.github.io/\n[yaafe]: https://github.com/Yaafe/Yaafe\n[offlineaudiocontext]: https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext\n[ffmpeg-audio-conversion]: https://www.howtoforge.com/tutorial/ffmpeg-audio-conversion/\n[ffmpeg-channel-split]: https://superuser.com/questions/685910/ffmpeg-stereo-channels-into-two-mono-channels\n[audio-feature-reference]: /audio-features\n"
  },
  {
    "path": "docs/guides/offline-node.md",
    "content": "---\nlayout: default\n---\n\n**Note: This guide requires a working installation of Node JS. If you don't have\none, please get set up using the [Node Version Manager][nvm]**\n\n# Offline Audio Feature Extraction in Node.js\n\nThere are many cases where you don't need to run audio feature extraction in\nreal time on audio that is playing in the browser. In the case of building a\ndatabase of audio features extracted from samples, for use in machine learning\nor visual score generation for example, you may wish to script the audio feature\nextraction process. Meyda exposes two interfaces for scripting audio feature\nextraction:\n\n- [A Command Line Interface][offline-cli]\n  - Useful for bash scripting of audio feature extraction\n- A Javascript API that does not depend up on Web Audio\n  - Useful for scripting feature extraction in Node JS\n\nThis article will discuss offline audio feature extraction in Node JS.\n\nOne significant advantage of Meyda's Javascript API for use in Node JS over its\ncommand line interface is that you can run audio feature extraction as part of\nthe rest of your application - for example, you could build a RESTful Web API,\nwhere a client could upload audio from their system, and receive the results of\nfeature extraction in response. This is useful if you do not wish to run audio\nfeature extraction in the client - perhaps you need to target browsers that do\nnot support the Web Audio API.\n\n_This guide doesn't cover how to load audio from disk in Node - it applies to\naudio wherever you've loaded it from. If you'd like to learn how to load audio\nfrom disk in Node, check out [this article][load-audio-from-disk-article]._\n\n## How to call Meyda in Node\n\nMeyda exposes a small Javascript API, which you can learn from our [reference\ndocumentation][api-reference].\n\nWe start by installing and importing Meyda in our Node JS project. If you don't\nalready have a Node JS project into which you wish to import Meyda, you should\nrun the following commands in your terminal application to create a directory\nand initialize a new Node JS project:\n\n```\nmkdir meyda-node-tutorial\ncd meyda-node-tutorial\nnpm init -y\ntouch index.js\n```\n\nRun the following command to install Meyda:\n\n```\nnpm install --save meyda\n```\n\nIn our Javascript file (`index.js` in the example above), we'll import Meyda:\n\n```javascript\nvar Meyda = require(\"meyda\");\n```\n\nNext, we will construct a signal that contains 20 zero crosses. A signal is a\nlist of numbers that can be between the values of -1 and 1. When a signal goes\nfrom a negative value to a positive value, or vice versa, it has crossed zero.\n\n```javascript\nvar signal = new Array(32).fill(0).map((element, index) => {\n  const remainder = index % 3;\n  if (remainder === 0) {\n    return 1;\n  } else if (remainder === 1) {\n    return 0;\n  }\n  return -1;\n});\n```\n\nThe signal looks like this:\n\n![A graph of a signal over time that oscillates from 1, to 0, to -1, and repeats\nuntil there are 32 values in the signal][signal-image]\n\nFinally, we can pass the signal to Meyda and ask it to calculate the zero\ncrossing rate for the signal:\n\n```javascript\nMeyda.extract(\"zcr\", signal);\n// returns 20\n```\n\nWe see that Meyda correctly calculates 20 zero crosses for our constructed\nsignal.\n\n## Conclusion\n\nIn this article, you have learned how to extract Audio Features using Meyda in\nNode JS. You can use this knowledge to build applications that extract audio\nin a variety of contexts, including web servers, command line utilities,\nscripts that extract audio features and insert them into a database for later\nuse, and much more.\n\nYou can see an example implementation of the code in this demo in our [runkit\ndemo page][runkit-demo]\n\nNext, why don't you check out our [audio feature reference]\n[audio-feature-reference] to learn about the various audio features that Meyda\ncan extract?\n\n[nvm]: https://github.com/creationix/nvm\n[offline-cli]: /guides/offline-cli\n[api-reference]: /reference\n[signal-image]: /images/signal-image.png\n[runkit-demo]: https://runkit.com/raw/5ba62181c2e2f10013c5bf38\n[audio-feature-reference]: /audio-features\n[load-audio-from-disk-article]: https://www.hughrawlinson.me/posts/2021/05/19/loading-audio-in-node-js\n"
  },
  {
    "path": "docs/guides/online-web-audio.md",
    "content": "---\nlayout: default\n---\n\nThis tutorial will guide you through the steps of using Meyda to analyze audio\nin the context of the [Web Audio API][webaudioapi]. The Web Audio API is a set\nof tools available in most major browsers that let you build immersive audio\nexperiences in the web.\n\nIf you run into any difficulties, please help us out by [reporting an issue]\n[new-issue] so that we can clarify this document for everyone.\n\nToday we'll build a website that plays an audio file, and shows the user the\nlevel (how loud the sound is) of the audio as it plays. Lets get started!\n\n## 1. Create a website project using your favorite tool\n\nMeyda works with standard Web APIs, and bundles all of its very minimal\ndependencies, so you can use it with your favorite tools. If you're looking for\na quick and easy tool to build and host a website for free, we recommend\n[glitch.com][glitch]. If you have an existing tool you'd prefer, please go ahead\nand use it, you'll be able to import Meyda in the standard way for your project.\n\nIf you're using glitch, log in and click \"new project\", then \"hello webpage\".\nYou'll be greeted with a fresh new website that's already live for you on the\ninternet!\n\n## 2. Add a HTML 5 Audio element to play your audio\n\nYou'll need some audio to visualize! If you don't already have your favorite mp3\nhandy, you can download a royalty free sound clip from [Freesound.org]\n[freesound].\n\nInclude it in your HTML by pasting the following snippet into the body of your\n`index.html`:\n\n```html\n<audio\n  controls\n  loop\n  crossorigin=\"anonymous\"\n  id=\"audio\"\n  src=\"[THE URL TO YOUR AUDIO FILE]\"\n></audio>\n```\n\nWhen you load your website, you should now see an audio player that plays your\naudio.\n\n## 3. Create a Web Audio \"Audio Context\", and play your audio through Web Audio\n\nNext, switch to your `script.js` (or wherever you're keeping your Javascript\ncode). In order for Meyda to hear your audio, you'll need to plug it in to the\nWeb Audio API. First, we create a Web Audio Context. This is like a box that all\nof your audio lives in. We create an audio context like this:\n\n```js\nconst audioContext = new AudioContext();\n```\n\nNow we need to have the audio context take control of your HTML Audio Element.\n\n```js\n// Select the Audio Element from the DOM\nconst htmlAudioElement = document.getElementById(\"audio\");\n// Create an \"Audio Node\" from the Audio Element\nconst source = audioContext.createMediaElementSource(htmlAudioElement);\n// Connect the Audio Node to your speakers. Now that the audio lives in the\n// Audio Context, you have to explicitly connect it to the speakers in order to\n// hear it\nsource.connect(audioContext.destination);\n```\n\nTry reloading the website again just to make sure that you can still hear the\naudio.\n\n## 4. Create a Meyda Analyzer, and tell it to listen to your audio\n\nHere's where Meyda gets involved! Now that audio is flowing between nodes in the\nAudio Context box, we need to create a Meyda Analyzer to listen to the audio\nand compute the level. Let's look at the code.\n\n```js\nif (typeof Meyda === \"undefined\") {\n  console.log(\"Meyda could not be found! Have you included it?\");\n} else {\n  const analyzer = Meyda.createMeydaAnalyzer({\n    audioContext: audioContext,\n    source: source,\n    bufferSize: 512,\n    featureExtractors: [\"rms\"],\n    callback: (features) => {\n      console.log(features);\n    },\n  });\n  analyzer.start();\n}\n```\n\nThat was a lot! Lets step through it bit by bit to see what it's doing.\n\nIf Meyda isn't available in Javascript, lets log it so that we know what's going\non. Usually this is caused by Meyda not being included correctly. If you're\nusing Glitch, make sure you've installed Meyda by pasting\n`<script src=\"https://unpkg.com/meyda/dist/web/meyda.min.js\"></script>` into\nyour HTML. In most other projects, make sure you've installed Meyda using npm,\nand imported or required it into your Javascript file.\n\n```js\nif (typeof Meyda === \"undefined\") {\n  console.log(\"Meyda could not be found! Have you included it?\");\n}\n```\n\nOtherwise, we'll create a Meyda Analyzer and tell it to listen to our Audio\nSource Node.\n\n```js\n// Create the Meyda Analyzer\nconst analyzer = Meyda.createMeydaAnalyzer({\n  // Pass in the AudioContext so that Meyda knows which AudioContext Box to work with\n  audioContext: audioContext,\n  // Source is the audio node that is playing your audio. It could be any node,\n  // but in this case, it's the MediaElementSourceNode corresponding to your\n  // HTML 5 Audio Element with your audio in it.\n  source: source,\n  // Buffer Size tells Meyda how often to check the audio feature, and is\n  // measured in Audio Samples. Usually there are 44100 Audio Samples in 1\n  // second, which means in this case Meyda will calculate the level about 86\n  // (44100/512) times per second.\n  bufferSize: 512,\n  // Here we're telling Meyda which audio features to calculate. While Meyda can\n  // calculate a variety of audio features, in this case we only want to know\n  // the \"rms\" (root mean square) of the audio signal, which corresponds to its\n  // level\n  featureExtractors: [\"rms\"],\n  // Finally, we provide a function which Meyda will call every time it\n  // calculates a new level. This function will be called around 86 times per\n  // second.\n  callback: (features) => {\n    console.log(features);\n  },\n});\n```\n\nNow that Meyda is hooked up to our Audio Source, we tell it to start calculating\nthe level like this:\n\n```js\nanalyzer.start();\n```\n\nWhen you run this code and play the audio in your HTML Audio Element, you should\nhear the audio, and see the level being printed to your browser console.\n\n## 5. Show the audio analysis that Meyda returns to your user\n\nOnly one more step! Now that Meyda is calculating the level of your audio in\nreal time, you can show the level in your web app. While there are plenty of\nways to visualize things, one of the simplest ways is to set the value of an\nhtml input element of type \"range\". Range is great because it displays as a\nslider in your web page. Lets add one in to our HTML:\n\n```html\n<label for=\"level\">level</label>\n<input\n  type=\"range\"\n  id=\"levelRange\"\n  name=\"level\"\n  min=\"0.0\"\n  max=\"1.0\"\n  step=\"0.001\"\n/>\n```\n\nThe level (root mean square) audio feature ranges between 0 and 1, so we set\nthese as the min and max values of our range. Level is a continuous audio\nfeature (as opposed to having a discrete set of possible values), so we set the\nstep size of our range element to be very small, so that we don't lose too much\nprecision when displaying it.\n\nNow that our HTML is in place, lets connect our Javascript.\n\nWe've got to store a reference to our input element in our Javascript file, so\nwe'll store it in a variable at the top of our file. If you get lost and don't\nknow where to paste the code, don't worry - you can check out the finished code\nat the end of the tutorial.\n\n```js\nconst levelRangeElement = document.getElementById(\"levelRange\");\n```\n\nFinally, inside Meyda's callback (where you log the level), you should set the\nvalue of the range element to the value of the level that Meyda reported.\n\n```js\nlevelRangeElement.value = features.rms;\n```\n\n---\n\nWell done! You built a website that shows the user the level of the audio\nthat's playing!\n\nHave a look at our complete implementation of this site hosted on Glitch.com\n\n<div class=\"glitch-embed-wrap\" style=\"height: 420px; width: 100%;\">\n  <iframe src=\"https://glitch.com/embed/#!/embed/meyda-tutorial?path=script.js&previewSize=42\" alt=\"meyda-tutorial on glitch\" style=\"height: 100%; width: 100%; border: 0;\"></iframe>\n</div>\n\nHere are a few things you might like to try next:\n\n1. Learn more about audio features\n2. Learn more about Web Audio\n3. Learn how to use Meyda in Node.js\n4. Learn how to choose Meyda's parameters for your use case\n\n[webaudioapi]: https://github.com/WebAudio/web-audio-api\n[glitch]: https://glitch.com/\n[freesound]: https://freesound.org\n[new-issue]: https://github.com/meyda/meyda/issues/new\n"
  },
  {
    "path": "docs/index.md",
    "content": "---\nlayout: homepage\n---\n\n## What is Meyda?\n\nMeyda is a JavaScript audio feature extraction library. It works with the Web\nAudio API (or plain old JavaScript arrays) to expose information about the\ntimbre and perceived qualities of sound. Meyda supports both offline feature\nextraction as well as real-time feature extraction using the\n[Web Audio API][webaudioapi]. We wrote a paper about it, which is available\n[here][paper].\n\nWould you like your Meyda project to be featured in our [user showcase]? [Please let us know!](https://github.com/meyda/meyda/issues/new?assignees=&labels=Showcase+Request&template=showcase-application.md&title=)\n\nWant to ask questions, or chat about Meyda? Check out our [slack channel] on the Web Audio Slack Team. You'll need to [sign up here][web-audio-slack-team-signup] before you can join.\n\n---\n\n[paper]: https://wac.ircam.fr/pdf/wac15_submission_17.pdf\n[webaudioapi]: https://github.com/WebAudio/web-audio-api\n[wiki]: https://github.com/hughrawlinson/meyda/wiki/getting-started\n[slack channel]: https://web-audio.slack.com/messages/C51A03LBS/\n[web-audio-slack-team-signup]: https://web-audio-slackin.herokuapp.com/\n[user showcase]: https://meyda.js.org/showcase\n"
  },
  {
    "path": "docs/major-changes-policy.md",
    "content": "---\nlayout: default\n---\n\n# Major changes Policy\n\nEarly on in the development of Meyda, we had to contend with the issue of how to relate changes to\naudio feature extractors to semantic versioning. Specifically, the question was this: if a bug fix\nto an audio feature extractor causes the result of that extractor to differ between Meyda versions,\nshould we consider that to be a breaking change. On the one hand, a correction to a feature\nextractor is a bug fix, and therefore should correspond to a semantic versioning patch number\nincrement. But there were deeper considerations to take into account.\n\nSeveral applications that relate to audio feature extraction involve caching the results of feature\nextraction on some corpus, for use in lookup systems. For example, storing the audio features of\nknown labelled sounds in a database such that at a later time the audio features of an unknown\nsound can be extracted and used with the [K Nearest Neighbors] algorithm for classification.\n\nWhen audio features are stored/cached on a corpus of sound for these lookup systems, a specific\nfeature extractor algorithm was used. The same extractor (more accurately, an extractor that is\nan equivalent pure function of a given signal) must be used at the lookup stage on the unknown\nsignal in order to provide comparable audio features on the new signal. Otherwise, the system\nwould in effect be comparing apples to oranges.\n\nIf Meyda were to change audio feature extractor implementations in such a way as to break extractor\nequivalency between patch versions, we would reduce the efficacy of systems that are sensitive to\nthese changes. Specifically, publishing these changes as patch versions could cause issues in user\nprojects that are particularly difficult to diagnose, since patch versions can be upgraded through\nversion ranges with no code changes in the user's package.\n\nTherefore, we have decided that every change to the output of an audio feature extractor _including\nbugfixes_ are to be considered breaking changes.\n\n[k nearest neighbors]: https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm\n"
  },
  {
    "path": "docs/package.json",
    "content": "{\n  \"name\": \"meyda-showcase-site\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A showcase site for Meyda\",\n  \"main\": \"\",\n  \"scripts\": {\n    \"test\": \"echo 'No tests yet...'\",\n    \"build\": \"rollup -c rollup.config.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/hughrawlinson/meyda.git\"\n  },\n  \"keywords\": [\n    \"meyda\"\n  ],\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/hughrawlinson/meyda/issues\"\n  },\n  \"homepage\": \"https://meyda.js.org/\",\n  \"browserslist\": \"> 0.25%, not dead\",\n  \"private\": \"true\",\n  \"devDependencies\": {\n    \"@types/meyda\": \"^4.3.8\",\n    \"@types/three\": \"^0.163.0\"\n  },\n  \"dependencies\": {\n    \"meyda\": \"^5.6.2\",\n    \"three\": \"^0.163.0\"\n  }\n}\n"
  },
  {
    "path": "docs/reference/.nojekyll",
    "content": "TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false."
  },
  {
    "path": "docs/reference/assets/highlight.css",
    "content": ":root {\n    --light-hl-0: #0000FF;\n    --dark-hl-0: #569CD6;\n    --light-hl-1: #000000;\n    --dark-hl-1: #D4D4D4;\n    --light-hl-2: #0070C1;\n    --dark-hl-2: #4FC1FF;\n    --light-hl-3: #001080;\n    --dark-hl-3: #9CDCFE;\n    --light-hl-4: #795E26;\n    --dark-hl-4: #DCDCAA;\n    --light-hl-5: #A31515;\n    --dark-hl-5: #CE9178;\n    --light-hl-6: #098658;\n    --dark-hl-6: #B5CEA8;\n    --light-code-background: #FFFFFF;\n    --dark-code-background: #1E1E1E;\n}\n\n@media (prefers-color-scheme: light) { :root {\n    --hl-0: var(--light-hl-0);\n    --hl-1: var(--light-hl-1);\n    --hl-2: var(--light-hl-2);\n    --hl-3: var(--light-hl-3);\n    --hl-4: var(--light-hl-4);\n    --hl-5: var(--light-hl-5);\n    --hl-6: var(--light-hl-6);\n    --code-background: var(--light-code-background);\n} }\n\n@media (prefers-color-scheme: dark) { :root {\n    --hl-0: var(--dark-hl-0);\n    --hl-1: var(--dark-hl-1);\n    --hl-2: var(--dark-hl-2);\n    --hl-3: var(--dark-hl-3);\n    --hl-4: var(--dark-hl-4);\n    --hl-5: var(--dark-hl-5);\n    --hl-6: var(--dark-hl-6);\n    --code-background: var(--dark-code-background);\n} }\n\nbody.light {\n    --hl-0: var(--light-hl-0);\n    --hl-1: var(--light-hl-1);\n    --hl-2: var(--light-hl-2);\n    --hl-3: var(--light-hl-3);\n    --hl-4: var(--light-hl-4);\n    --hl-5: var(--light-hl-5);\n    --hl-6: var(--light-hl-6);\n    --code-background: var(--light-code-background);\n}\n\nbody.dark {\n    --hl-0: var(--dark-hl-0);\n    --hl-1: var(--dark-hl-1);\n    --hl-2: var(--dark-hl-2);\n    --hl-3: var(--dark-hl-3);\n    --hl-4: var(--dark-hl-4);\n    --hl-5: var(--dark-hl-5);\n    --hl-6: var(--dark-hl-6);\n    --code-background: var(--dark-code-background);\n}\n\n.hl-0 { color: var(--hl-0); }\n.hl-1 { color: var(--hl-1); }\n.hl-2 { color: var(--hl-2); }\n.hl-3 { color: var(--hl-3); }\n.hl-4 { color: var(--hl-4); }\n.hl-5 { color: var(--hl-5); }\n.hl-6 { color: var(--hl-6); }\npre, code { background: var(--code-background); }\n"
  },
  {
    "path": "docs/reference/assets/icons.css",
    "content": ".tsd-kind-icon {\n    display: block;\n    position: relative;\n    padding-left: 20px;\n    text-indent: -20px;\n}\n.tsd-kind-icon:before {\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    width: 17px;\n    height: 17px;\n    margin: 0 3px 2px 0;\n    background-image: url(./icons.png);\n}\n@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {\n    .tsd-kind-icon:before {\n        background-image: url(./icons@2x.png);\n        background-size: 238px 204px;\n    }\n}\n\n.tsd-signature.tsd-kind-icon:before {\n    background-position: 0 -153px;\n}\n\n.tsd-kind-object-literal > .tsd-kind-icon:before {\n    background-position: 0px -17px;\n}\n.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -17px;\n}\n.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -17px;\n}\n\n.tsd-kind-class > .tsd-kind-icon:before {\n    background-position: 0px -34px;\n}\n.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -34px;\n}\n.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -34px;\n}\n\n.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before {\n    background-position: 0px -51px;\n}\n.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -17px -51px;\n}\n.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -51px;\n}\n\n.tsd-kind-interface > .tsd-kind-icon:before {\n    background-position: 0px -68px;\n}\n.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -68px;\n}\n.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -68px;\n}\n\n.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before {\n    background-position: 0px -85px;\n}\n.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -17px -85px;\n}\n.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -34px -85px;\n}\n\n.tsd-kind-namespace > .tsd-kind-icon:before {\n    background-position: 0px -102px;\n}\n.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -102px;\n}\n.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -102px;\n}\n\n.tsd-kind-module > .tsd-kind-icon:before {\n    background-position: 0px -102px;\n}\n.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -102px;\n}\n.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -102px;\n}\n\n.tsd-kind-enum > .tsd-kind-icon:before {\n    background-position: 0px -119px;\n}\n.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -119px;\n}\n.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -119px;\n}\n\n.tsd-kind-enum-member > .tsd-kind-icon:before {\n    background-position: 0px -136px;\n}\n.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -136px;\n}\n.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -136px;\n}\n\n.tsd-kind-signature > .tsd-kind-icon:before {\n    background-position: 0px -153px;\n}\n.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -153px;\n}\n.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -153px;\n}\n\n.tsd-kind-type-alias > .tsd-kind-icon:before {\n    background-position: 0px -170px;\n}\n.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -17px -170px;\n}\n.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -34px -170px;\n}\n\n.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before {\n    background-position: 0px -187px;\n}\n.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -17px -187px;\n}\n.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -34px -187px;\n}\n\n.tsd-kind-variable > .tsd-kind-icon:before {\n    background-position: -136px -0px;\n}\n.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -0px;\n}\n.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -0px;\n}\n.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -0px;\n}\n\n.tsd-kind-property > .tsd-kind-icon:before {\n    background-position: -136px -0px;\n}\n.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -0px;\n}\n.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -0px;\n}\n.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -0px;\n}\n\n.tsd-kind-get-signature > .tsd-kind-icon:before {\n    background-position: -136px -17px;\n}\n.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -17px;\n}\n.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -17px;\n}\n.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -17px;\n}\n\n.tsd-kind-set-signature > .tsd-kind-icon:before {\n    background-position: -136px -34px;\n}\n.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -34px;\n}\n.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -34px;\n}\n.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -34px;\n}\n\n.tsd-kind-accessor > .tsd-kind-icon:before {\n    background-position: -136px -51px;\n}\n.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -51px;\n}\n.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -51px;\n}\n.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -51px;\n}\n\n.tsd-kind-function > .tsd-kind-icon:before {\n    background-position: -136px -68px;\n}\n.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -68px;\n}\n.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -68px;\n}\n.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -68px;\n}\n\n.tsd-kind-method > .tsd-kind-icon:before {\n    background-position: -136px -68px;\n}\n.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -68px;\n}\n.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -187px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -68px;\n}\n.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -68px;\n}\n\n.tsd-kind-call-signature > .tsd-kind-icon:before {\n    background-position: -136px -68px;\n}\n.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -68px;\n}\n.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -68px;\n}\n.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -68px;\n}\n\n.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before {\n    background-position: -136px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -153px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class\n    > .tsd-kind-icon:before {\n    background-position: -51px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum\n    > .tsd-kind-icon:before {\n    background-position: -170px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -85px;\n}\n.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -85px;\n}\n\n.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before {\n    background-position: -136px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -153px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class\n    > .tsd-kind-icon:before {\n    background-position: -51px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum\n    > .tsd-kind-icon:before {\n    background-position: -170px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -85px;\n}\n.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -85px;\n}\n\n.tsd-kind-constructor > .tsd-kind-icon:before {\n    background-position: -136px -102px;\n}\n.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -102px;\n}\n.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -102px;\n}\n.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -102px;\n}\n\n.tsd-kind-constructor-signature > .tsd-kind-icon:before {\n    background-position: -136px -102px;\n}\n.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -102px;\n}\n.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -102px;\n}\n.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -102px;\n}\n\n.tsd-kind-index-signature > .tsd-kind-icon:before {\n    background-position: -136px -119px;\n}\n.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -119px;\n}\n.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -119px;\n}\n.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -119px;\n}\n\n.tsd-kind-event > .tsd-kind-icon:before {\n    background-position: -136px -136px;\n}\n.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -136px;\n}\n.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {\n    background-position: -68px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -85px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -187px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -136px;\n}\n.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -136px;\n}\n\n.tsd-is-static > .tsd-kind-icon:before {\n    background-position: -136px -153px;\n}\n.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -153px;\n}\n.tsd-is-static.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -153px;\n}\n.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -153px;\n}\n.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {\n    background-position: -68px -153px;\n}\n.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -85px -153px;\n}\n.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -153px;\n}\n.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -153px;\n}\n.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -153px;\n}\n.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -187px -153px;\n}\n.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -153px;\n}\n.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before {\n    background-position: -204px -153px;\n}\n.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -153px;\n}\n\n.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before {\n    background-position: -136px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -170px;\n}\n.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -170px;\n}\n\n.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before {\n    background-position: -136px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -170px;\n}\n.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -170px;\n}\n\n.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before {\n    background-position: -136px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -153px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class\n    > .tsd-kind-icon:before {\n    background-position: -51px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum\n    > .tsd-kind-icon:before {\n    background-position: -170px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -170px;\n}\n.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -170px;\n}\n\n.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before {\n    background-position: -136px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {\n    background-position: -153px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {\n    background-position: -119px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {\n    background-position: -51px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -68px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -85px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -102px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {\n    background-position: -170px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected\n    > .tsd-kind-icon:before {\n    background-position: -187px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private\n    > .tsd-kind-icon:before {\n    background-position: -119px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface\n    > .tsd-kind-icon:before {\n    background-position: -204px -187px;\n}\n.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited\n    > .tsd-kind-icon:before {\n    background-position: -221px -187px;\n}\n"
  },
  {
    "path": "docs/reference/assets/main.js",
    "content": "(()=>{var Ce=Object.create;var J=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Me=t=>J(t,\"__esModule\",{value:!0});var Fe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Oe(e))!_e.call(t,n)&&n!==\"default\"&&J(t,n,{get:()=>e[n],enumerable:!(r=Pe(e,n))||r.enumerable});return t},Ae=t=>De(Me(J(t!=null?Ce(Re(t)):{},\"default\",t&&t.__esModule&&\"default\"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var de=Fe((ue,he)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version=\"2.3.9\";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?\"\":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var s=n[i],o=e[s];if(Array.isArray(o)){r[s]=o.slice();continue}if(typeof o==\"string\"||typeof o==\"number\"||typeof o==\"boolean\"){r[s]=o;continue}throw new TypeError(\"clone is not deep and does not support nested objects\")}return r},t.FieldRef=function(e,r,n){this.docRef=e,this.fieldName=r,this._stringValue=n},t.FieldRef.joiner=\"/\",t.FieldRef.fromString=function(e){var r=e.indexOf(t.FieldRef.joiner);if(r===-1)throw\"malformed field ref string\";var n=e.slice(0,r),i=e.slice(r+1);return new t.FieldRef(i,n,e)},t.FieldRef.prototype.toString=function(){return this._stringValue==null&&(this._stringValue=this.fieldName+t.FieldRef.joiner+this.docRef),this._stringValue};t.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var r=0;r<this.length;r++)this.elements[e[r]]=!0}else this.length=0},t.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},t.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},t.Set.prototype.contains=function(e){return!!this.elements[e]},t.Set.prototype.intersect=function(e){var r,n,i,s=[];if(e===t.Set.complete)return this;if(e===t.Set.empty)return e;this.length<e.length?(r=this,n=e):(r=e,n=this),i=Object.keys(r.elements);for(var o=0;o<i.length;o++){var a=i[o];a in n.elements&&s.push(a)}return new t.Set(s)},t.Set.prototype.union=function(e){return e===t.Set.complete?t.Set.complete:e===t.Set.empty?this:new t.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},t.idf=function(e,r){var n=0;for(var i in e)i!=\"_index\"&&(n+=Object.keys(e[i]).length);var s=(r-n+.5)/(n+.5);return Math.log(1+Math.abs(s))},t.Token=function(e,r){this.str=e||\"\",this.metadata=r||{}},t.Token.prototype.toString=function(){return this.str},t.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},t.Token.prototype.clone=function(e){return e=e||function(r){return r},new t.Token(e(this.str,this.metadata),this.metadata)};t.tokenizer=function(e,r){if(e==null||e==null)return[];if(Array.isArray(e))return e.map(function(f){return new t.Token(t.utils.asString(f).toLowerCase(),t.utils.clone(r))});for(var n=e.toString().toLowerCase(),i=n.length,s=[],o=0,a=0;o<=i;o++){var c=n.charAt(o),l=o-a;if(c.match(t.tokenizer.separator)||o==i){if(l>0){var h=t.utils.clone(r)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\\s\\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn(\"Overwriting existing registered function: \"+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index.\n`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error(\"Cannot load unregistered function: \"+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error(\"Cannot find existingFn\");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error(\"Cannot find existingFn\");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n<r;n++){for(var i=this._stack[n],s=[],o=0;o<e.length;o++){var a=i(e[o],o,e);if(!(a==null||a===\"\"))if(Array.isArray(a))for(var c=0;c<a.length;c++)s.push(a[c]);else s.push(a)}e=s}return e},t.Pipeline.prototype.runString=function(e,r){var n=new t.Token(e,r);return this.run([n]).map(function(i){return i.toString()})},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})};t.Vector=function(e){this._magnitude=0,this.elements=e||[]},t.Vector.prototype.positionForIndex=function(e){if(this.elements.length==0)return 0;for(var r=0,n=this.elements.length/2,i=n-r,s=Math.floor(i/2),o=this.elements[s*2];i>1&&(o<e&&(r=s),o>e&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(o<e)return(s+1)*2},t.Vector.prototype.insert=function(e,r){this.upsert(e,r,function(){throw\"duplicate index\"})},t.Vector.prototype.upsert=function(e,r,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],r):this.elements.splice(i,0,e,r)},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,r=this.elements.length,n=1;n<r;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},t.Vector.prototype.dot=function(e){for(var r=0,n=this.elements,i=e.elements,s=n.length,o=i.length,a=0,c=0,l=0,h=0;l<s&&h<o;)a=n[l],c=i[h],a<c?l+=2:a>c?h+=2:a==c&&(r+=n[l+1]*i[h+1],l+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r<this.elements.length;r+=2,n++)e[n]=this.elements[r];return e},t.Vector.prototype.toJSON=function(){return this.elements};t.stemmer=function(){var e={ational:\"ate\",tional:\"tion\",enci:\"ence\",anci:\"ance\",izer:\"ize\",bli:\"ble\",alli:\"al\",entli:\"ent\",eli:\"e\",ousli:\"ous\",ization:\"ize\",ation:\"ate\",ator:\"ate\",alism:\"al\",iveness:\"ive\",fulness:\"ful\",ousness:\"ous\",aliti:\"al\",iviti:\"ive\",biliti:\"ble\",logi:\"log\"},r={icate:\"ic\",ative:\"\",alize:\"al\",iciti:\"ic\",ical:\"ic\",ful:\"\",ness:\"\"},n=\"[^aeiou]\",i=\"[aeiouy]\",s=n+\"[^aeiouy]*\",o=i+\"[aeiou]*\",a=\"^(\"+s+\")?\"+o+s,c=\"^(\"+s+\")?\"+o+s+\"(\"+o+\")?$\",l=\"^(\"+s+\")?\"+o+s+o+s,h=\"^(\"+s+\")?\"+i,f=new RegExp(a),v=new RegExp(l),b=new RegExp(c),y=new RegExp(h),E=/^(.+?)(ss|i)es$/,p=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,T=/^(.+?)(ed|ing)$/,w=/.$/,k=/(at|bl|iz)$/,M=new RegExp(\"([^aeiouylsz])\\\\1$\"),j=new RegExp(\"^\"+s+i+\"[^aeiouwxy]$\"),V=/^(.+?[^aeiou])y$/,B=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,q=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,H=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,$=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,W=/ll$/,U=new RegExp(\"^\"+s+i+\"[^aeiouwxy]$\"),z=function(u){var g,O,S,d,x,R,D;if(u.length<3)return u;if(S=u.substr(0,1),S==\"y\"&&(u=S.toUpperCase()+u.substr(1)),d=E,x=p,d.test(u)?u=u.replace(d,\"$1$2\"):x.test(u)&&(u=u.replace(x,\"$1$2\")),d=m,x=T,d.test(u)){var L=d.exec(u);d=f,d.test(L[1])&&(d=w,u=u.replace(d,\"\"))}else if(x.test(u)){var L=x.exec(u);g=L[1],x=y,x.test(g)&&(u=g,x=k,R=M,D=j,x.test(u)?u=u+\"e\":R.test(u)?(d=w,u=u.replace(d,\"\")):D.test(u)&&(u=u+\"e\"))}if(d=V,d.test(u)){var L=d.exec(u);g=L[1],u=g+\"i\"}if(d=B,d.test(u)){var L=d.exec(u);g=L[1],O=L[2],d=f,d.test(g)&&(u=g+e[O])}if(d=q,d.test(u)){var L=d.exec(u);g=L[1],O=L[2],d=f,d.test(g)&&(u=g+r[O])}if(d=H,x=$,d.test(u)){var L=d.exec(u);g=L[1],d=v,d.test(g)&&(u=g)}else if(x.test(u)){var L=x.exec(u);g=L[1]+L[2],x=v,x.test(g)&&(u=g)}if(d=P,d.test(u)){var L=d.exec(u);g=L[1],d=v,x=b,R=U,(d.test(g)||x.test(g)&&!R.test(g))&&(u=g)}return d=W,x=v,d.test(u)&&x.test(u)&&(d=w,u=u.replace(d,\"\")),S==\"y\"&&(u=S.toLowerCase()+u.substr(1)),u};return function(F){return F.update(z)}}(),t.Pipeline.registerFunction(t.stemmer,\"stemmer\");t.generateStopWordFilter=function(e){var r=e.reduce(function(n,i){return n[i]=i,n},{});return function(n){if(n&&r[n.toString()]!==n.toString())return n}},t.stopWordFilter=t.generateStopWordFilter([\"a\",\"able\",\"about\",\"across\",\"after\",\"all\",\"almost\",\"also\",\"am\",\"among\",\"an\",\"and\",\"any\",\"are\",\"as\",\"at\",\"be\",\"because\",\"been\",\"but\",\"by\",\"can\",\"cannot\",\"could\",\"dear\",\"did\",\"do\",\"does\",\"either\",\"else\",\"ever\",\"every\",\"for\",\"from\",\"get\",\"got\",\"had\",\"has\",\"have\",\"he\",\"her\",\"hers\",\"him\",\"his\",\"how\",\"however\",\"i\",\"if\",\"in\",\"into\",\"is\",\"it\",\"its\",\"just\",\"least\",\"let\",\"like\",\"likely\",\"may\",\"me\",\"might\",\"most\",\"must\",\"my\",\"neither\",\"no\",\"nor\",\"not\",\"of\",\"off\",\"often\",\"on\",\"only\",\"or\",\"other\",\"our\",\"own\",\"rather\",\"said\",\"say\",\"says\",\"she\",\"should\",\"since\",\"so\",\"some\",\"than\",\"that\",\"the\",\"their\",\"them\",\"then\",\"there\",\"these\",\"they\",\"this\",\"tis\",\"to\",\"too\",\"twas\",\"us\",\"wants\",\"was\",\"we\",\"were\",\"what\",\"when\",\"where\",\"which\",\"while\",\"who\",\"whom\",\"why\",\"will\",\"with\",\"would\",\"yet\",\"you\",\"your\"]),t.Pipeline.registerFunction(t.stopWordFilter,\"stopWordFilter\");t.trimmer=function(e){return e.update(function(r){return r.replace(/^\\W+/,\"\").replace(/\\W+$/,\"\")})},t.Pipeline.registerFunction(t.trimmer,\"trimmer\");t.TokenSet=function(){this.final=!1,this.edges={},this.id=t.TokenSet._nextId,t.TokenSet._nextId+=1},t.TokenSet._nextId=1,t.TokenSet.fromArray=function(e){for(var r=new t.TokenSet.Builder,n=0,i=e.length;n<i;n++)r.insert(e[n]);return r.finish(),r.root},t.TokenSet.fromClause=function(e){return\"editDistance\"in e?t.TokenSet.fromFuzzyString(e.term,e.editDistance):t.TokenSet.fromString(e.term)},t.TokenSet.fromFuzzyString=function(e,r){for(var n=new t.TokenSet,i=[{node:n,editsRemaining:r,str:e}];i.length;){var s=i.pop();if(s.str.length>0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if(\"*\"in s.node.edges)var c=s.node.edges[\"*\"];else{var c=new t.TokenSet;s.node.edges[\"*\"]=c}if(s.str.length==0&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if(\"*\"in s.node.edges)var l=s.node.edges[\"*\"];else{var l=new t.TokenSet;s.node.edges[\"*\"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),f=s.str.charAt(1),v;f in s.node.edges?v=s.node.edges[f]:(v=new t.TokenSet,s.node.edges[f]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i<s;i++){var o=e[i],a=i==s-1;if(o==\"*\")r.edges[o]=r,r.final=a;else{var c=new t.TokenSet;c.final=a,r.edges[o]=c,r=c}}return n},t.TokenSet.prototype.toArray=function(){for(var e=[],r=[{prefix:\"\",node:this}];r.length;){var n=r.pop(),i=Object.keys(n.node.edges),s=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<s;o++){var a=i[o];r.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},t.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?\"1\":\"0\",r=Object.keys(this.edges).sort(),n=r.length,i=0;i<n;i++){var s=r[i],o=this.edges[s];e=e+s+o.id}return e},t.TokenSet.prototype.intersect=function(e){for(var r=new t.TokenSet,n=void 0,i=[{qNode:e,output:r,node:this}];i.length;){n=i.pop();for(var s=Object.keys(n.qNode.edges),o=s.length,a=Object.keys(n.node.edges),c=a.length,l=0;l<o;l++)for(var h=s[l],f=0;f<c;f++){var v=a[f];if(v==h||h==\"*\"){var b=n.node.edges[v],y=n.qNode.edges[h],E=b.final&&y.final,p=void 0;v in n.output.edges?(p=n.output.edges[v],p.final=p.final||E):(p=new t.TokenSet,p.final=E,n.output.edges[v]=p),i.push({qNode:y,output:p,node:b})}}}return r},t.TokenSet.Builder=function(){this.previousWord=\"\",this.root=new t.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},t.TokenSet.Builder.prototype.insert=function(e){var r,n=0;if(e<this.previousWord)throw new Error(\"Out of order word insertion\");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),this.uncheckedNodes.length==0?r=this.root:r=this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var i=n;i<e.length;i++){var s=new t.TokenSet,o=e[i];r.edges[o]=s,this.uncheckedNodes.push({parent:r,char:o,child:s}),r=s}r.final=!0,this.previousWord=e},t.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},t.TokenSet.Builder.prototype.minimize=function(e){for(var r=this.uncheckedNodes.length-1;r>=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),c=0;c<this.fields.length;c++)i[this.fields[c]]=new t.Vector;e.call(r,r);for(var c=0;c<r.clauses.length;c++){var l=r.clauses[c],h=null,f=t.Set.empty;l.usePipeline?h=this.pipeline.runString(l.term,{fields:l.fields}):h=[l.term];for(var v=0;v<h.length;v++){var b=h[v];l.term=b;var y=t.TokenSet.fromClause(l),E=this.tokenSet.intersect(y).toArray();if(E.length===0&&l.presence===t.Query.presence.REQUIRED){for(var p=0;p<l.fields.length;p++){var m=l.fields[p];o[m]=t.Set.empty}break}for(var T=0;T<E.length;T++)for(var w=E[T],k=this.invertedIndex[w],M=k._index,p=0;p<l.fields.length;p++){var m=l.fields[p],j=k[m],V=Object.keys(j),B=w+\"/\"+m,q=new t.Set(V);if(l.presence==t.Query.presence.REQUIRED&&(f=f.union(q),o[m]===void 0&&(o[m]=t.Set.complete)),l.presence==t.Query.presence.PROHIBITED){a[m]===void 0&&(a[m]=t.Set.empty),a[m]=a[m].union(q);continue}if(i[m].upsert(M,l.boost,function(Qe,Ie){return Qe+Ie}),!s[B]){for(var H=0;H<V.length;H++){var $=V[H],P=new t.FieldRef($,m),W=j[$],U;(U=n[P])===void 0?n[P]=new t.MatchData(w,m,W):U.add(w,m,W)}s[B]=!0}}}if(l.presence===t.Query.presence.REQUIRED)for(var p=0;p<l.fields.length;p++){var m=l.fields[p];o[m]=o[m].intersect(f)}}for(var z=t.Set.complete,F=t.Set.empty,c=0;c<this.fields.length;c++){var m=this.fields[c];o[m]&&(z=z.intersect(o[m])),a[m]&&(F=F.union(a[m]))}var u=Object.keys(n),g=[],O=Object.create(null);if(r.isNegated()){u=Object.keys(this.fieldVectors);for(var c=0;c<u.length;c++){var P=u[c],S=t.FieldRef.fromString(P);n[P]=new t.MatchData}}for(var c=0;c<u.length;c++){var S=t.FieldRef.fromString(u[c]),d=S.docRef;if(!!z.contains(d)&&!F.contains(d)){var x=this.fieldVectors[S],R=i[S.fieldName].similarity(x),D;if((D=O[d])!==void 0)D.score+=R,D.matchData.combine(n[S]);else{var L={ref:d,score:R,matchData:n[S]};O[d]=L,g.push(L)}}}return g.sort(function(Se,ke){return ke.score-Se.score})},t.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(n){return[n,this.invertedIndex[n]]},this),r=Object.keys(this.fieldVectors).map(function(n){return[n,this.fieldVectors[n].toJSON()]},this);return{version:t.version,fields:this.fields,fieldVectors:r,invertedIndex:e,pipeline:this.pipeline.toJSON()}},t.Index.load=function(e){var r={},n={},i=e.fieldVectors,s=Object.create(null),o=e.invertedIndex,a=new t.TokenSet.Builder,c=t.Pipeline.load(e.pipeline);e.version!=t.version&&t.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\"+t.version+\"' does not match serialized index '\"+e.version+\"'\");for(var l=0;l<i.length;l++){var h=i[l],f=h[0],v=h[1];n[f]=new t.Vector(v)}for(var l=0;l<o.length;l++){var h=o[l],b=h[0],y=h[1];a.insert(b),s[b]=y}return a.finish(),r.fields=e.fields,r.fieldVectors=n,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=c,new t.Index(r)};t.Builder=function(){this._ref=\"id\",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=t.tokenizer,this.pipeline=new t.Pipeline,this.searchPipeline=new t.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},t.Builder.prototype.ref=function(e){this._ref=e},t.Builder.prototype.field=function(e,r){if(/\\//.test(e))throw new RangeError(\"Field '\"+e+\"' contains illegal character '/'\");this._fields[e]=r||{}},t.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s<i.length;s++){var o=i[s],a=this._fields[o].extractor,c=a?a(e):e[o],l=this.tokenizer(c,{fields:[o]}),h=this.pipeline.run(l),f=new t.FieldRef(n,o),v=Object.create(null);this.fieldTermFrequencies[f]=v,this.fieldLengths[f]=0,this.fieldLengths[f]+=h.length;for(var b=0;b<h.length;b++){var y=h[b];if(v[y]==null&&(v[y]=0),v[y]+=1,this.invertedIndex[y]==null){var E=Object.create(null);E._index=this.termIndex,this.termIndex+=1;for(var p=0;p<i.length;p++)E[i[p]]=Object.create(null);this.invertedIndex[y]=E}this.invertedIndex[y][o][n]==null&&(this.invertedIndex[y][o][n]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var T=this.metadataWhitelist[m],w=y.metadata[T];this.invertedIndex[y][o][n][T]==null&&(this.invertedIndex[y][o][n][T]=[]),this.invertedIndex[y][o][n][T].push(w)}}}},t.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),r=e.length,n={},i={},s=0;s<r;s++){var o=t.FieldRef.fromString(e[s]),a=o.fieldName;i[a]||(i[a]=0),i[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}for(var c=Object.keys(this._fields),s=0;s<c.length;s++){var l=c[s];n[l]=n[l]/i[l]}this.averageFieldLength=n},t.Builder.prototype.createFieldVectors=function(){for(var e={},r=Object.keys(this.fieldTermFrequencies),n=r.length,i=Object.create(null),s=0;s<n;s++){for(var o=t.FieldRef.fromString(r[s]),a=o.fieldName,c=this.fieldLengths[o],l=new t.Vector,h=this.fieldTermFrequencies[o],f=Object.keys(h),v=f.length,b=this._fields[a].boost||1,y=this._documents[o.docRef].boost||1,E=0;E<v;E++){var p=f[E],m=h[p],T=this.invertedIndex[p]._index,w,k,M;i[p]===void 0?(w=t.idf(this.invertedIndex[p],this.documentCount),i[p]=w):w=i[p],k=w*((this._k1+1)*m)/(this._k1*(1-this._b+this._b*(c/this.averageFieldLength[a]))+m),k*=b,k*=y,M=Math.round(k*1e3)/1e3,l.insert(T,M)}e[o]=l}this.fieldVectors=e},t.Builder.prototype.createTokenSet=function(){this.tokenSet=t.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},t.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new t.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},t.Builder.prototype.use=function(e){var r=Array.prototype.slice.call(arguments,1);r.unshift(this),e.apply(this,r)},t.MatchData=function(e,r,n){for(var i=Object.create(null),s=Object.keys(n||{}),o=0;o<s.length;o++){var a=s[o];i[a]=n[a].slice()}this.metadata=Object.create(null),e!==void 0&&(this.metadata[e]=Object.create(null),this.metadata[e][r]=i)},t.MatchData.prototype.combine=function(e){for(var r=Object.keys(e.metadata),n=0;n<r.length;n++){var i=r[n],s=Object.keys(e.metadata[i]);this.metadata[i]==null&&(this.metadata[i]=Object.create(null));for(var o=0;o<s.length;o++){var a=s[o],c=Object.keys(e.metadata[i][a]);this.metadata[i][a]==null&&(this.metadata[i][a]=Object.create(null));for(var l=0;l<c.length;l++){var h=c[l];this.metadata[i][a][h]==null?this.metadata[i][a][h]=e.metadata[i][a][h]:this.metadata[i][a][h]=this.metadata[i][a][h].concat(e.metadata[i][a][h])}}}},t.MatchData.prototype.add=function(e,r,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][r]=n;return}if(!(r in this.metadata[e])){this.metadata[e][r]=n;return}for(var i=Object.keys(n),s=0;s<i.length;s++){var o=i[s];o in this.metadata[e][r]?this.metadata[e][r][o]=this.metadata[e][r][o].concat(n[o]):this.metadata[e][r][o]=n[o]}},t.Query=function(e){this.clauses=[],this.allFields=e},t.Query.wildcard=new String(\"*\"),t.Query.wildcard.NONE=0,t.Query.wildcard.LEADING=1,t.Query.wildcard.TRAILING=2,t.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},t.Query.prototype.clause=function(e){return\"fields\"in e||(e.fields=this.allFields),\"boost\"in e||(e.boost=1),\"usePipeline\"in e||(e.usePipeline=!0),\"wildcard\"in e||(e.wildcard=t.Query.wildcard.NONE),e.wildcard&t.Query.wildcard.LEADING&&e.term.charAt(0)!=t.Query.wildcard&&(e.term=\"*\"+e.term),e.wildcard&t.Query.wildcard.TRAILING&&e.term.slice(-1)!=t.Query.wildcard&&(e.term=\"\"+e.term+\"*\"),\"presence\"in e||(e.presence=t.Query.presence.OPTIONAL),this.clauses.push(e),this},t.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=t.Query.presence.PROHIBITED)return!1;return!0},t.Query.prototype.term=function(e,r){if(Array.isArray(e))return e.forEach(function(i){this.term(i,t.utils.clone(r))},this),this;var n=r||{};return n.term=e.toString(),this.clause(n),this},t.QueryParseError=function(e,r,n){this.name=\"QueryParseError\",this.message=e,this.start=r,this.end=n},t.QueryParseError.prototype=new Error,t.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},t.QueryLexer.prototype.run=function(){for(var e=t.QueryLexer.lexText;e;)e=e(this)},t.QueryLexer.prototype.sliceString=function(){for(var e=[],r=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(r,n)),r=n+1;return e.push(this.str.slice(r,this.pos)),this.escapeCharPositions.length=0,e.join(\"\")},t.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},t.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},t.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos<this.length},t.QueryLexer.EOS=\"EOS\",t.QueryLexer.FIELD=\"FIELD\",t.QueryLexer.TERM=\"TERM\",t.QueryLexer.EDIT_DISTANCE=\"EDIT_DISTANCE\",t.QueryLexer.BOOST=\"BOOST\",t.QueryLexer.PRESENCE=\"PRESENCE\",t.QueryLexer.lexField=function(e){return e.backup(),e.emit(t.QueryLexer.FIELD),e.ignore(),t.QueryLexer.lexText},t.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==\":\")return t.QueryLexer.lexField;if(r==\"~\")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r==\"^\")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r==\"+\"&&e.width()===1||r==\"-\"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n=\"expected either a field or a term, found \"+r.type;throw r.str.length>=1&&(n+=\" with value '\"+r.str+\"'\"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case\"-\":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case\"+\":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n=\"unrecognised presence operator'\"+r.str+\"'\";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n=\"expecting term or field, found nothing\";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n=\"expecting term or field, found '\"+i.type+\"'\";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return\"'\"+o+\"'\"}).join(\", \"),i=\"unrecognised field '\"+r.str+\"', possible fields: \"+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i=\"expecting term, found nothing\";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i=\"expecting term, found '\"+s.type+\"'\";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf(\"*\")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i=\"Unexpected lexeme type '\"+n.type+\"'\";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i=\"edit distance must be numeric\";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i=\"Unexpected lexeme type '\"+s.type+\"'\";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i=\"boost must be numeric\";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i=\"Unexpected lexeme type '\"+s.type+\"'\";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define==\"function\"&&define.amd?define(r):typeof ue==\"object\"?he.exports=r():e.lunr=r()}(this,function(){return t})})()});var le=[];function N(t,e){le.push({selector:e,constructor:t})}var X=class{constructor(){this.createComponents(document.body)}createComponents(e){le.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n}),n.dataset.hasInstance=String(!0))})})}};var Q=class{constructor(e){this.el=e.el}};var Z=class{constructor(){this.listeners={}}addEventListener(e,r){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){if(!(e in this.listeners))return;let n=this.listeners[e];for(let i=0,s=n.length;i<s;i++)if(n[i]===r){n.splice(i,1);return}}dispatchEvent(e){if(!(e.type in this.listeners))return!0;let r=this.listeners[e.type].slice();for(let n=0,i=r.length;n<i;n++)r[n].call(this,e);return!e.defaultPrevented}};var K=(t,e=100)=>{let r=Date.now();return(...n)=>{r+e-Date.now()<0&&(t(...n),r=Date.now())}};var ee=class extends Z{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(\".tsd-page-toolbar\"),this.secondaryNav=document.querySelector(\".tsd-navigation.secondary\"),window.addEventListener(\"scroll\",K(()=>this.onScroll(),10)),window.addEventListener(\"resize\",K(()=>this.onResize(),10)),this.onResize(),this.onScroll()}triggerResize(){let e=new CustomEvent(\"resize\",{detail:{width:this.width,height:this.height}});this.dispatchEvent(e)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let e=new CustomEvent(\"resize\",{detail:{width:this.width,height:this.height}});this.dispatchEvent(e)}onScroll(){this.scrollTop=window.scrollY||0;let e=new CustomEvent(\"scroll\",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(e),this.hideShowToolbar()}hideShowToolbar(){let e=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0,e!==this.showToolbar&&(this.toolbar.classList.toggle(\"tsd-page-toolbar--hide\"),this.secondaryNav.classList.toggle(\"tsd-navigation--toolbar-hide\")),this.lastY=this.scrollTop}},I=ee;I.instance=new ee;var te=class extends Q{constructor(e){super(e);this.anchors=[];this.index=-1;I.instance.addEventListener(\"resize\",()=>this.onResize()),I.instance.addEventListener(\"scroll\",r=>this.onScroll(r)),this.createAnchors()}createAnchors(){let e=window.location.href;e.indexOf(\"#\")!=-1&&(e=e.substr(0,e.indexOf(\"#\"))),this.el.querySelectorAll(\"a\").forEach(r=>{let n=r.href;if(n.indexOf(\"#\")==-1||n.substr(0,e.length)!=e)return;let i=n.substr(n.indexOf(\"#\")+1),s=document.querySelector(\"a.tsd-anchor[name=\"+i+\"]\"),o=r.parentNode;!s||!o||this.anchors.push({link:o,anchor:s,position:0})}),this.onResize()}onResize(){let e;for(let n=0,i=this.anchors.length;n<i;n++){e=this.anchors[n];let s=e.anchor.getBoundingClientRect();e.position=s.top+document.body.scrollTop}this.anchors.sort((n,i)=>n.position-i.position);let r=new CustomEvent(\"scroll\",{detail:{scrollTop:I.instance.scrollTop}});this.onScroll(r)}onScroll(e){let r=e.detail.scrollTop+5,n=this.anchors,i=n.length-1,s=this.index;for(;s>-1&&n[s].position>r;)s-=1;for(;s<i&&n[s+1].position<r;)s+=1;this.index!=s&&(this.index>-1&&this.anchors[this.index].link.classList.remove(\"focus\"),this.index=s,this.index>-1&&this.anchors[this.index].link.classList.add(\"focus\"))}};var ce=(t,e=100)=>{let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>t(n),e)}};var pe=Ae(de());function fe(){let t=document.getElementById(\"tsd-search\");if(!t)return;let e=document.getElementById(\"search-script\");t.classList.add(\"loading\"),e&&(e.addEventListener(\"error\",()=>{t.classList.remove(\"loading\"),t.classList.add(\"failure\")}),e.addEventListener(\"load\",()=>{t.classList.remove(\"loading\"),t.classList.add(\"ready\")}),window.searchData&&t.classList.remove(\"loading\"));let r=document.querySelector(\"#tsd-search input\"),n=document.querySelector(\"#tsd-search .results\");if(!r||!n)throw new Error(\"The input field or the result list wrapper was not found\");let i=!1;n.addEventListener(\"mousedown\",()=>i=!0),n.addEventListener(\"mouseup\",()=>{i=!1,t.classList.remove(\"has-focus\")}),r.addEventListener(\"focus\",()=>t.classList.add(\"has-focus\")),r.addEventListener(\"blur\",()=>{i||(i=!1,t.classList.remove(\"has-focus\"))});let s={base:t.dataset.base+\"/\"};Ve(t,n,r,s)}function Ve(t,e,r,n){r.addEventListener(\"input\",ce(()=>{ze(t,e,r,n)},200));let i=!1;r.addEventListener(\"keydown\",s=>{i=!0,s.key==\"Enter\"?Ne(e,r):s.key==\"Escape\"?r.blur():s.key==\"ArrowUp\"?me(e,-1):s.key===\"ArrowDown\"?me(e,1):i=!1}),r.addEventListener(\"keypress\",s=>{i&&s.preventDefault()}),document.body.addEventListener(\"keydown\",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(\":focus\")&&s.key===\"/\"&&(r.focus(),s.preventDefault())})}function He(t,e){t.index||window.searchData&&(e.classList.remove(\"loading\"),e.classList.add(\"ready\"),t.data=window.searchData,t.index=pe.Index.load(window.searchData.index))}function ze(t,e,r,n){if(He(n,t),!n.index||!n.data)return;e.textContent=\"\";let i=r.value.trim(),s=n.index.search(`*${i}*`);for(let o=0,a=Math.min(10,s.length);o<a;o++){let c=n.data.rows[Number(s[o].ref)],l=ve(c.name,i);c.parent&&(l=`<span class=\"parent\">${ve(c.parent,i)}.</span>${l}`);let h=document.createElement(\"li\");h.classList.value=c.classes;let f=document.createElement(\"a\");f.href=n.base+c.url,f.classList.add(\"tsd-kind-icon\"),f.innerHTML=l,h.append(f),e.appendChild(h)}}function me(t,e){let r=t.querySelector(\".current\");if(!r)r=t.querySelector(e==1?\"li:first-child\":\"li:last-child\"),r&&r.classList.add(\"current\");else{let n=r;if(e===1)do n=n.nextElementSibling;while(n instanceof HTMLElement&&n.offsetParent==null);else do n=n.previousElementSibling;while(n instanceof HTMLElement&&n.offsetParent==null);n&&(r.classList.remove(\"current\"),n.classList.add(\"current\"))}}function Ne(t,e){let r=t.querySelector(\".current\");if(r||(r=t.querySelector(\"li:first-child\")),r){let n=r.querySelector(\"a\");n&&(window.location.href=n.href),e.blur()}}function ve(t,e){if(e===\"\")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(re(t.substring(s,o)),`<b>${re(t.substring(o,o+n.length))}</b>`),s=o+n.length,o=r.indexOf(n,s);return i.push(re(t.substring(s))),i.join(\"\")}var je={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",\"'\":\"&#039;\",'\"':\"&quot;\"};function re(t){return t.replace(/[&<>\"'\"]/g,e=>je[e])}var ge=class{constructor(e,r){this.signature=e,this.description=r}addClass(e){return this.signature.classList.add(e),this.description.classList.add(e),this}removeClass(e){return this.signature.classList.remove(e),this.description.classList.remove(e),this}},ne=class extends Q{constructor(e){super(e);this.groups=[];this.index=-1;this.createGroups(),this.container&&(this.el.classList.add(\"active\"),Array.from(this.el.children).forEach(r=>{r.addEventListener(\"touchstart\",n=>this.onClick(n)),r.addEventListener(\"click\",n=>this.onClick(n))}),this.container.classList.add(\"active\"),this.setIndex(0))}setIndex(e){if(e<0&&(e=0),e>this.groups.length-1&&(e=this.groups.length-1),this.index==e)return;let r=this.groups[e];if(this.index>-1){let n=this.groups[this.index];n.removeClass(\"current\").addClass(\"fade-out\"),r.addClass(\"current\"),r.addClass(\"fade-in\"),I.instance.triggerResize(),setTimeout(()=>{n.removeClass(\"fade-out\"),r.removeClass(\"fade-in\")},300)}else r.addClass(\"current\"),I.instance.triggerResize();this.index=e}createGroups(){let e=this.el.children;if(e.length<2)return;this.container=this.el.nextElementSibling;let r=this.container.children;this.groups=[];for(let n=0;n<e.length;n++)this.groups.push(new ge(e[n],r[n]))}onClick(e){this.groups.forEach((r,n)=>{r.signature===e.currentTarget&&this.setIndex(n)})}};var C=\"mousedown\",ye=\"mousemove\",_=\"mouseup\",G={x:0,y:0},xe=!1,ie=!1,Be=!1,A=!1,Le=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Le?\"is-mobile\":\"not-mobile\");Le&&\"ontouchstart\"in document.documentElement&&(Be=!0,C=\"touchstart\",ye=\"touchmove\",_=\"touchend\");document.addEventListener(C,t=>{ie=!0,A=!1;let e=C==\"touchstart\"?t.targetTouches[0]:t;G.y=e.pageY||0,G.x=e.pageX||0});document.addEventListener(ye,t=>{if(!!ie&&!A){let e=C==\"touchstart\"?t.targetTouches[0]:t,r=G.x-(e.pageX||0),n=G.y-(e.pageY||0);A=Math.sqrt(r*r+n*n)>10}});document.addEventListener(_,()=>{ie=!1});document.addEventListener(\"click\",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var se=class extends Q{constructor(e){super(e);this.className=this.el.dataset.toggle||\"\",this.el.addEventListener(_,r=>this.onPointerUp(r)),this.el.addEventListener(\"click\",r=>r.preventDefault()),document.addEventListener(C,r=>this.onDocumentPointerDown(r)),document.addEventListener(_,r=>this.onDocumentPointerUp(r))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle(\"has-\"+this.className,e),this.el.classList.toggle(\"active\",e);let r=(this.active?\"to-has-\":\"from-has-\")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(e){A||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(\".col-menu, .tsd-filter-group\"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!A&&this.active&&e.target.closest(\".col-menu\")){let r=e.target.closest(\"a\");if(r){let n=window.location.href;n.indexOf(\"#\")!=-1&&(n=n.substr(0,n.indexOf(\"#\"))),r.href.substr(0,n.length)==n&&setTimeout(()=>this.setActive(!1),250)}}}};var oe=class{constructor(e,r){this.key=e,this.value=r,this.defaultValue=r,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}initialize(){}setValue(e){if(this.value==e)return;let r=this.value;this.value=e,window.localStorage[this.key]=this.toLocalStorage(e),this.handleValueChange(r,e)}},ae=class extends oe{initialize(){let e=document.querySelector(\"#tsd-filter-\"+this.key);!e||(this.checkbox=e,this.checkbox.addEventListener(\"change\",()=>{this.setValue(this.checkbox.checked)}))}handleValueChange(e,r){!this.checkbox||(this.checkbox.checked=this.value,document.documentElement.classList.toggle(\"toggle-\"+this.key,this.value!=this.defaultValue))}fromLocalStorage(e){return e==\"true\"}toLocalStorage(e){return e?\"true\":\"false\"}},Ee=class extends oe{initialize(){document.documentElement.classList.add(\"toggle-\"+this.key+this.value);let e=document.querySelector(\"#tsd-filter-\"+this.key);if(!e)return;this.select=e;let r=()=>{this.select.classList.add(\"active\")},n=()=>{this.select.classList.remove(\"active\")};this.select.addEventListener(C,r),this.select.addEventListener(\"mouseover\",r),this.select.addEventListener(\"mouseleave\",n),this.select.querySelectorAll(\"li\").forEach(i=>{i.addEventListener(_,s=>{e.classList.remove(\"active\"),this.setValue(s.target.dataset.value||\"\")})}),document.addEventListener(C,i=>{this.select.contains(i.target)||this.select.classList.remove(\"active\")})}handleValueChange(e,r){this.select.querySelectorAll(\"li.selected\").forEach(s=>{s.classList.remove(\"selected\")});let n=this.select.querySelector('li[data-value=\"'+r+'\"]'),i=this.select.querySelector(\".tsd-select-label\");n&&i&&(n.classList.add(\"selected\"),i.textContent=n.textContent),document.documentElement.classList.remove(\"toggle-\"+e),document.documentElement.classList.add(\"toggle-\"+r)}fromLocalStorage(e){return e}toLocalStorage(e){return e}},Y=class extends Q{constructor(e){super(e);this.optionVisibility=new Ee(\"visibility\",\"private\"),this.optionInherited=new ae(\"inherited\",!0),this.optionExternals=new ae(\"externals\",!0)}static isSupported(){try{return typeof window.localStorage!=\"undefined\"}catch{return!1}}};function be(t){let e=localStorage.getItem(\"tsd-theme\")||\"os\";t.value=e,we(e),t.addEventListener(\"change\",()=>{localStorage.setItem(\"tsd-theme\",t.value),we(t.value)})}function we(t){switch(t){case\"os\":document.body.classList.remove(\"light\",\"dark\");break;case\"light\":document.body.classList.remove(\"dark\"),document.body.classList.add(\"light\");break;case\"dark\":document.body.classList.remove(\"light\"),document.body.classList.add(\"dark\");break}}fe();N(te,\".menu-highlight\");N(ne,\".tsd-signatures\");N(se,\"a[data-toggle]\");Y.isSupported()?N(Y,\"#tsd-filter\"):document.documentElement.classList.add(\"no-filter\");var Te=document.getElementById(\"theme\");Te&&be(Te);var qe=new X;Object.defineProperty(window,\"app\",{value:qe});})();\n/*!\n * lunr.Builder\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.Index\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.Pipeline\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.Set\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.TokenSet\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.Vector\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.stemmer\n * Copyright (C) 2020 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.tokenizer\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.trimmer\n * Copyright (C) 2020 Oliver Nightingale\n */\n/*!\n * lunr.utils\n * Copyright (C) 2020 Oliver Nightingale\n */\n/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9\n * Copyright (C) 2020 Oliver Nightingale\n * @license MIT\n */\n"
  },
  {
    "path": "docs/reference/assets/search.js",
    "content": "window.searchData = {\"kinds\":{\"2\":\"Module\",\"32\":\"Variable\",\"128\":\"Class\",\"256\":\"Interface\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\"},\"rows\":[{\"id\":0,\"kind\":2,\"name\":\"meyda-wa\",\"url\":\"modules/meyda_wa.html\",\"classes\":\"tsd-kind-module\"},{\"id\":1,\"kind\":256,\"name\":\"MeydaAnalyzerOptions\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"meyda-wa\"},{\"id\":2,\"kind\":1024,\"name\":\"audioContext\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#audioContext\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":3,\"kind\":1024,\"name\":\"source\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#source\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":4,\"kind\":1024,\"name\":\"bufferSize\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#bufferSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":5,\"kind\":1024,\"name\":\"hopSize\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#hopSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":6,\"kind\":1024,\"name\":\"sampleRate\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#sampleRate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":7,\"kind\":1024,\"name\":\"startImmediately\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#startImmediately\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":8,\"kind\":1024,\"name\":\"channel\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#channel\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":9,\"kind\":1024,\"name\":\"windowingFunction\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#windowingFunction\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":10,\"kind\":1024,\"name\":\"featureExtractors\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#featureExtractors\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":11,\"kind\":1024,\"name\":\"inputs\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#inputs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":12,\"kind\":1024,\"name\":\"outputs\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#outputs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":13,\"kind\":1024,\"name\":\"numberOfMFCCCoefficients\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#numberOfMFCCCoefficients\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":14,\"kind\":1024,\"name\":\"callback\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#callback\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":15,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/meyda_wa.MeydaAnalyzerOptions.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"meyda-wa.MeydaAnalyzerOptions\"},{\"id\":16,\"kind\":128,\"name\":\"MeydaAnalyzer\",\"url\":\"classes/meyda_wa.MeydaAnalyzer.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-module\",\"parent\":\"meyda-wa\"},{\"id\":17,\"kind\":2048,\"name\":\"start\",\"url\":\"classes/meyda_wa.MeydaAnalyzer.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"meyda-wa.MeydaAnalyzer\"},{\"id\":18,\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/meyda_wa.MeydaAnalyzer.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"meyda-wa.MeydaAnalyzer\"},{\"id\":19,\"kind\":2048,\"name\":\"setSource\",\"url\":\"classes/meyda_wa.MeydaAnalyzer.html#setSource\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"meyda-wa.MeydaAnalyzer\"},{\"id\":20,\"kind\":2048,\"name\":\"setChannel\",\"url\":\"classes/meyda_wa.MeydaAnalyzer.html#setChannel\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"meyda-wa.MeydaAnalyzer\"},{\"id\":21,\"kind\":2048,\"name\":\"get\",\"url\":\"classes/meyda_wa.MeydaAnalyzer.html#get\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"meyda-wa.MeydaAnalyzer\"},{\"id\":22,\"kind\":2,\"name\":\"Meyda\",\"url\":\"modules/Meyda.html\",\"classes\":\"tsd-kind-module\"},{\"id\":23,\"kind\":256,\"name\":\"MeydaFeaturesObject\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"Meyda\"},{\"id\":24,\"kind\":1024,\"name\":\"amplitudeSpectrum\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#amplitudeSpectrum\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":25,\"kind\":1024,\"name\":\"buffer\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#buffer\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":26,\"kind\":1024,\"name\":\"chroma\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#chroma\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":27,\"kind\":1024,\"name\":\"complexSpectrum\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#complexSpectrum\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":28,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":29,\"kind\":1024,\"name\":\"real\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#__type.real\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Meyda.MeydaFeaturesObject.__type\"},{\"id\":30,\"kind\":1024,\"name\":\"imag\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#__type.imag\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Meyda.MeydaFeaturesObject.__type\"},{\"id\":31,\"kind\":1024,\"name\":\"energy\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#energy\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":32,\"kind\":1024,\"name\":\"loudness\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#loudness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":33,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":34,\"kind\":1024,\"name\":\"specific\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#__type-1.specific\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Meyda.MeydaFeaturesObject.__type\"},{\"id\":35,\"kind\":1024,\"name\":\"total\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#__type-1.total\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Meyda.MeydaFeaturesObject.__type\"},{\"id\":36,\"kind\":1024,\"name\":\"mfcc\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#mfcc\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":37,\"kind\":1024,\"name\":\"perceptualSharpness\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#perceptualSharpness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":38,\"kind\":1024,\"name\":\"perceptualSpread\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#perceptualSpread\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":39,\"kind\":1024,\"name\":\"powerSpectrum\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#powerSpectrum\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":40,\"kind\":1024,\"name\":\"rms\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#rms\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":41,\"kind\":1024,\"name\":\"spectralCentroid\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralCentroid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":42,\"kind\":1024,\"name\":\"spectralFlatness\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralFlatness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":43,\"kind\":1024,\"name\":\"spectralKurtosis\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralKurtosis\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":44,\"kind\":1024,\"name\":\"spectralRolloff\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralRolloff\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":45,\"kind\":1024,\"name\":\"spectralSkewness\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralSkewness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":46,\"kind\":1024,\"name\":\"spectralSlope\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralSlope\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":47,\"kind\":1024,\"name\":\"spectralSpread\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#spectralSpread\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":48,\"kind\":1024,\"name\":\"zcr\",\"url\":\"interfaces/Meyda.MeydaFeaturesObject.html#zcr\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.MeydaFeaturesObject\"},{\"id\":49,\"kind\":4194304,\"name\":\"MeydaWindowingFunction\",\"url\":\"modules/Meyda.html#MeydaWindowingFunction\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-module\",\"parent\":\"Meyda\"},{\"id\":50,\"kind\":4194304,\"name\":\"MeydaAudioFeature\",\"url\":\"modules/Meyda.html#MeydaAudioFeature\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-module\",\"parent\":\"Meyda\"},{\"id\":51,\"kind\":4194304,\"name\":\"MeydaSignal\",\"url\":\"modules/Meyda.html#MeydaSignal\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-module\",\"parent\":\"Meyda\"},{\"id\":52,\"kind\":256,\"name\":\"SliceableArrayLike\",\"url\":\"interfaces/Meyda.SliceableArrayLike.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module tsd-has-type-parameter\",\"parent\":\"Meyda\"},{\"id\":53,\"kind\":2048,\"name\":\"slice\",\"url\":\"interfaces/Meyda.SliceableArrayLike.html#slice\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Meyda.SliceableArrayLike\"},{\"id\":54,\"kind\":32,\"name\":\"default\",\"url\":\"modules/Meyda.html#default-1\",\"classes\":\"tsd-kind-variable tsd-parent-kind-module\",\"parent\":\"Meyda\"},{\"id\":55,\"kind\":256,\"name\":\"default\",\"url\":\"interfaces/Meyda.default.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"Meyda\"},{\"id\":56,\"kind\":1024,\"name\":\"audioContext\",\"url\":\"interfaces/Meyda.default.html#audioContext\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":57,\"kind\":1024,\"name\":\"bufferSize\",\"url\":\"interfaces/Meyda.default.html#bufferSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":58,\"kind\":1024,\"name\":\"sampleRate\",\"url\":\"interfaces/Meyda.default.html#sampleRate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":59,\"kind\":1024,\"name\":\"melBands\",\"url\":\"interfaces/Meyda.default.html#melBands\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":60,\"kind\":1024,\"name\":\"chromaBands\",\"url\":\"interfaces/Meyda.default.html#chromaBands\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":61,\"kind\":1024,\"name\":\"windowingFunction\",\"url\":\"interfaces/Meyda.default.html#windowingFunction\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":62,\"kind\":1024,\"name\":\"featureExtractors\",\"url\":\"interfaces/Meyda.default.html#featureExtractors\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":63,\"kind\":1024,\"name\":\"numberOfMFCCCoefficients\",\"url\":\"interfaces/Meyda.default.html#numberOfMFCCCoefficients\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":64,\"kind\":2048,\"name\":\"windowing\",\"url\":\"interfaces/Meyda.default.html#windowing\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":65,\"kind\":2048,\"name\":\"createMeydaAnalyzer\",\"url\":\"interfaces/Meyda.default.html#createMeydaAnalyzer\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":66,\"kind\":2048,\"name\":\"listAvailableFeatureExtractors\",\"url\":\"interfaces/Meyda.default.html#listAvailableFeatureExtractors\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"},{\"id\":67,\"kind\":2048,\"name\":\"extract\",\"url\":\"interfaces/Meyda.default.html#extract\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Meyda.default\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[[\"name/0\",[0,5.843,1,21.337]],[\"parent/0\",[]],[\"name/1\",[2,38.515]],[\"parent/1\",[0,0.664,1,2.423]],[\"name/2\",[3,33.376]],[\"parent/2\",[0,0.664,4,1.268]],[\"name/3\",[5,38.515]],[\"parent/3\",[0,0.664,4,1.268]],[\"name/4\",[6,33.376]],[\"parent/4\",[0,0.664,4,1.268]],[\"name/5\",[7,38.515]],[\"parent/5\",[0,0.664,4,1.268]],[\"name/6\",[8,33.376]],[\"parent/6\",[0,0.664,4,1.268]],[\"name/7\",[9,38.515]],[\"parent/7\",[0,0.664,4,1.268]],[\"name/8\",[10,38.515]],[\"parent/8\",[0,0.664,4,1.268]],[\"name/9\",[11,33.376]],[\"parent/9\",[0,0.664,4,1.268]],[\"name/10\",[12,33.376]],[\"parent/10\",[0,0.664,4,1.268]],[\"name/11\",[13,38.515]],[\"parent/11\",[0,0.664,4,1.268]],[\"name/12\",[14,38.515]],[\"parent/12\",[0,0.664,4,1.268]],[\"name/13\",[15,33.376]],[\"parent/13\",[0,0.664,4,1.268]],[\"name/14\",[16,38.515]],[\"parent/14\",[0,0.664,4,1.268]],[\"name/15\",[17,29.991]],[\"parent/15\",[0,0.664,4,1.268]],[\"name/16\",[18,38.515]],[\"parent/16\",[0,0.664,1,2.423]],[\"name/17\",[19,38.515]],[\"parent/17\",[0,0.664,20,2.056]],[\"name/18\",[21,38.515]],[\"parent/18\",[0,0.664,20,2.056]],[\"name/19\",[22,38.515]],[\"parent/19\",[0,0.664,20,2.056]],[\"name/20\",[23,38.515]],[\"parent/20\",[0,0.664,20,2.056]],[\"name/21\",[24,38.515]],[\"parent/21\",[0,0.664,20,2.056]],[\"name/22\",[0,8.212]],[\"parent/22\",[]],[\"name/23\",[25,38.515]],[\"parent/23\",[0,0.896]],[\"name/24\",[26,38.515]],[\"parent/24\",[27,1.28]],[\"name/25\",[28,38.515]],[\"parent/25\",[27,1.28]],[\"name/26\",[29,38.515]],[\"parent/26\",[27,1.28]],[\"name/27\",[30,38.515]],[\"parent/27\",[27,1.28]],[\"name/28\",[17,29.991]],[\"parent/28\",[27,1.28]],[\"name/29\",[31,38.515]],[\"parent/29\",[32,2.998]],[\"name/30\",[33,38.515]],[\"parent/30\",[32,2.998]],[\"name/31\",[34,38.515]],[\"parent/31\",[27,1.28]],[\"name/32\",[35,38.515]],[\"parent/32\",[27,1.28]],[\"name/33\",[17,29.991]],[\"parent/33\",[27,1.28]],[\"name/34\",[36,38.515]],[\"parent/34\",[32,2.998]],[\"name/35\",[37,38.515]],[\"parent/35\",[32,2.998]],[\"name/36\",[38,38.515]],[\"parent/36\",[27,1.28]],[\"name/37\",[39,38.515]],[\"parent/37\",[27,1.28]],[\"name/38\",[40,38.515]],[\"parent/38\",[27,1.28]],[\"name/39\",[41,38.515]],[\"parent/39\",[27,1.28]],[\"name/40\",[42,38.515]],[\"parent/40\",[27,1.28]],[\"name/41\",[43,38.515]],[\"parent/41\",[27,1.28]],[\"name/42\",[44,38.515]],[\"parent/42\",[27,1.28]],[\"name/43\",[45,38.515]],[\"parent/43\",[27,1.28]],[\"name/44\",[46,38.515]],[\"parent/44\",[27,1.28]],[\"name/45\",[47,38.515]],[\"parent/45\",[27,1.28]],[\"name/46\",[48,38.515]],[\"parent/46\",[27,1.28]],[\"name/47\",[49,38.515]],[\"parent/47\",[27,1.28]],[\"name/48\",[50,38.515]],[\"parent/48\",[27,1.28]],[\"name/49\",[51,38.515]],[\"parent/49\",[0,0.896]],[\"name/50\",[52,38.515]],[\"parent/50\",[0,0.896]],[\"name/51\",[53,38.515]],[\"parent/51\",[0,0.896]],[\"name/52\",[54,38.515]],[\"parent/52\",[0,0.896]],[\"name/53\",[55,38.515]],[\"parent/53\",[56,4.204]],[\"name/54\",[57,33.376]],[\"parent/54\",[0,0.896]],[\"name/55\",[57,33.376]],[\"parent/55\",[0,0.896]],[\"name/56\",[3,33.376]],[\"parent/56\",[58,1.876]],[\"name/57\",[6,33.376]],[\"parent/57\",[58,1.876]],[\"name/58\",[8,33.376]],[\"parent/58\",[58,1.876]],[\"name/59\",[59,38.515]],[\"parent/59\",[58,1.876]],[\"name/60\",[60,38.515]],[\"parent/60\",[58,1.876]],[\"name/61\",[11,33.376]],[\"parent/61\",[58,1.876]],[\"name/62\",[12,33.376]],[\"parent/62\",[58,1.876]],[\"name/63\",[15,33.376]],[\"parent/63\",[58,1.876]],[\"name/64\",[61,38.515]],[\"parent/64\",[58,1.876]],[\"name/65\",[62,38.515]],[\"parent/65\",[58,1.876]],[\"name/66\",[63,38.515]],[\"parent/66\",[58,1.876]],[\"name/67\",[64,38.515]],[\"parent/67\",[58,1.876]]],\"invertedIndex\":[[\"__type\",{\"_index\":17,\"name\":{\"15\":{},\"28\":{},\"33\":{}},\"parent\":{}}],[\"amplitudespectrum\",{\"_index\":26,\"name\":{\"24\":{}},\"parent\":{}}],[\"audiocontext\",{\"_index\":3,\"name\":{\"2\":{},\"56\":{}},\"parent\":{}}],[\"buffer\",{\"_index\":28,\"name\":{\"25\":{}},\"parent\":{}}],[\"buffersize\",{\"_index\":6,\"name\":{\"4\":{},\"57\":{}},\"parent\":{}}],[\"callback\",{\"_index\":16,\"name\":{\"14\":{}},\"parent\":{}}],[\"channel\",{\"_index\":10,\"name\":{\"8\":{}},\"parent\":{}}],[\"chroma\",{\"_index\":29,\"name\":{\"26\":{}},\"parent\":{}}],[\"chromabands\",{\"_index\":60,\"name\":{\"60\":{}},\"parent\":{}}],[\"complexspectrum\",{\"_index\":30,\"name\":{\"27\":{}},\"parent\":{}}],[\"createmeydaanalyzer\",{\"_index\":62,\"name\":{\"65\":{}},\"parent\":{}}],[\"default\",{\"_index\":57,\"name\":{\"54\":{},\"55\":{}},\"parent\":{}}],[\"energy\",{\"_index\":34,\"name\":{\"31\":{}},\"parent\":{}}],[\"extract\",{\"_index\":64,\"name\":{\"67\":{}},\"parent\":{}}],[\"featureextractors\",{\"_index\":12,\"name\":{\"10\":{},\"62\":{}},\"parent\":{}}],[\"get\",{\"_index\":24,\"name\":{\"21\":{}},\"parent\":{}}],[\"hopsize\",{\"_index\":7,\"name\":{\"5\":{}},\"parent\":{}}],[\"imag\",{\"_index\":33,\"name\":{\"30\":{}},\"parent\":{}}],[\"inputs\",{\"_index\":13,\"name\":{\"11\":{}},\"parent\":{}}],[\"listavailablefeatureextractors\",{\"_index\":63,\"name\":{\"66\":{}},\"parent\":{}}],[\"loudness\",{\"_index\":35,\"name\":{\"32\":{}},\"parent\":{}}],[\"melbands\",{\"_index\":59,\"name\":{\"59\":{}},\"parent\":{}}],[\"meyda\",{\"_index\":0,\"name\":{\"0\":{},\"22\":{}},\"parent\":{\"1\":{},\"2\":{},\"3\":{},\"4\":{},\"5\":{},\"6\":{},\"7\":{},\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{},\"16\":{},\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"23\":{},\"49\":{},\"50\":{},\"51\":{},\"52\":{},\"54\":{},\"55\":{}}}],[\"meyda.default\",{\"_index\":58,\"name\":{},\"parent\":{\"56\":{},\"57\":{},\"58\":{},\"59\":{},\"60\":{},\"61\":{},\"62\":{},\"63\":{},\"64\":{},\"65\":{},\"66\":{},\"67\":{}}}],[\"meyda.meydafeaturesobject\",{\"_index\":27,\"name\":{},\"parent\":{\"24\":{},\"25\":{},\"26\":{},\"27\":{},\"28\":{},\"31\":{},\"32\":{},\"33\":{},\"36\":{},\"37\":{},\"38\":{},\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"45\":{},\"46\":{},\"47\":{},\"48\":{}}}],[\"meyda.meydafeaturesobject.__type\",{\"_index\":32,\"name\":{},\"parent\":{\"29\":{},\"30\":{},\"34\":{},\"35\":{}}}],[\"meyda.sliceablearraylike\",{\"_index\":56,\"name\":{},\"parent\":{\"53\":{}}}],[\"meydaanalyzer\",{\"_index\":18,\"name\":{\"16\":{}},\"parent\":{}}],[\"meydaanalyzeroptions\",{\"_index\":2,\"name\":{\"1\":{}},\"parent\":{}}],[\"meydaaudiofeature\",{\"_index\":52,\"name\":{\"50\":{}},\"parent\":{}}],[\"meydafeaturesobject\",{\"_index\":25,\"name\":{\"23\":{}},\"parent\":{}}],[\"meydasignal\",{\"_index\":53,\"name\":{\"51\":{}},\"parent\":{}}],[\"meydawindowingfunction\",{\"_index\":51,\"name\":{\"49\":{}},\"parent\":{}}],[\"mfcc\",{\"_index\":38,\"name\":{\"36\":{}},\"parent\":{}}],[\"numberofmfcccoefficients\",{\"_index\":15,\"name\":{\"13\":{},\"63\":{}},\"parent\":{}}],[\"outputs\",{\"_index\":14,\"name\":{\"12\":{}},\"parent\":{}}],[\"perceptualsharpness\",{\"_index\":39,\"name\":{\"37\":{}},\"parent\":{}}],[\"perceptualspread\",{\"_index\":40,\"name\":{\"38\":{}},\"parent\":{}}],[\"powerspectrum\",{\"_index\":41,\"name\":{\"39\":{}},\"parent\":{}}],[\"real\",{\"_index\":31,\"name\":{\"29\":{}},\"parent\":{}}],[\"rms\",{\"_index\":42,\"name\":{\"40\":{}},\"parent\":{}}],[\"samplerate\",{\"_index\":8,\"name\":{\"6\":{},\"58\":{}},\"parent\":{}}],[\"setchannel\",{\"_index\":23,\"name\":{\"20\":{}},\"parent\":{}}],[\"setsource\",{\"_index\":22,\"name\":{\"19\":{}},\"parent\":{}}],[\"slice\",{\"_index\":55,\"name\":{\"53\":{}},\"parent\":{}}],[\"sliceablearraylike\",{\"_index\":54,\"name\":{\"52\":{}},\"parent\":{}}],[\"source\",{\"_index\":5,\"name\":{\"3\":{}},\"parent\":{}}],[\"specific\",{\"_index\":36,\"name\":{\"34\":{}},\"parent\":{}}],[\"spectralcentroid\",{\"_index\":43,\"name\":{\"41\":{}},\"parent\":{}}],[\"spectralflatness\",{\"_index\":44,\"name\":{\"42\":{}},\"parent\":{}}],[\"spectralkurtosis\",{\"_index\":45,\"name\":{\"43\":{}},\"parent\":{}}],[\"spectralrolloff\",{\"_index\":46,\"name\":{\"44\":{}},\"parent\":{}}],[\"spectralskewness\",{\"_index\":47,\"name\":{\"45\":{}},\"parent\":{}}],[\"spectralslope\",{\"_index\":48,\"name\":{\"46\":{}},\"parent\":{}}],[\"spectralspread\",{\"_index\":49,\"name\":{\"47\":{}},\"parent\":{}}],[\"start\",{\"_index\":19,\"name\":{\"17\":{}},\"parent\":{}}],[\"startimmediately\",{\"_index\":9,\"name\":{\"7\":{}},\"parent\":{}}],[\"stop\",{\"_index\":21,\"name\":{\"18\":{}},\"parent\":{}}],[\"total\",{\"_index\":37,\"name\":{\"35\":{}},\"parent\":{}}],[\"wa\",{\"_index\":1,\"name\":{\"0\":{}},\"parent\":{\"1\":{},\"16\":{}}}],[\"wa.meydaanalyzer\",{\"_index\":20,\"name\":{},\"parent\":{\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{}}}],[\"wa.meydaanalyzeroptions\",{\"_index\":4,\"name\":{},\"parent\":{\"2\":{},\"3\":{},\"4\":{},\"5\":{},\"6\":{},\"7\":{},\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{}}}],[\"windowing\",{\"_index\":61,\"name\":{\"64\":{}},\"parent\":{}}],[\"windowingfunction\",{\"_index\":11,\"name\":{\"9\":{},\"61\":{}},\"parent\":{}}],[\"zcr\",{\"_index\":50,\"name\":{\"48\":{}},\"parent\":{}}]],\"pipeline\":[]}}"
  },
  {
    "path": "docs/reference/assets/style.css",
    "content": "@import url(\"./icons.css\");\n\n:root {\n    /* Light */\n    --light-color-background: #fcfcfc;\n    --light-color-secondary-background: #fff;\n    --light-color-text: #222;\n    --light-color-text-aside: #707070;\n    --light-color-link: #4da6ff;\n    --light-color-menu-divider: #eee;\n    --light-color-menu-divider-focus: #000;\n    --light-color-menu-label: #707070;\n    --light-color-panel: var(--light-color-secondary-background);\n    --light-color-panel-divider: #eee;\n    --light-color-comment-tag: #707070;\n    --light-color-comment-tag-text: #fff;\n    --light-color-ts: #9600ff;\n    --light-color-ts-interface: #647f1b;\n    --light-color-ts-enum: #937210;\n    --light-color-ts-class: #0672de;\n    --light-color-ts-private: #707070;\n    --light-color-toolbar: #fff;\n    --light-color-toolbar-text: #333;\n    --light-icon-filter: invert(0);\n    --light-external-icon: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='10' height='10'><path fill-opacity='0' stroke='%23000' stroke-width='10' d='m43,35H5v60h60V57M45,5v10l10,10-30,30 20,20 30-30 10,10h10V5z'/></svg>\");\n\n    /* Dark */\n    --dark-color-background: #36393f;\n    --dark-color-secondary-background: #2f3136;\n    --dark-color-text: #ffffff;\n    --dark-color-text-aside: #e6e4e4;\n    --dark-color-link: #00aff4;\n    --dark-color-menu-divider: #eee;\n    --dark-color-menu-divider-focus: #000;\n    --dark-color-menu-label: #707070;\n    --dark-color-panel: var(--dark-color-secondary-background);\n    --dark-color-panel-divider: #818181;\n    --dark-color-comment-tag: #dcddde;\n    --dark-color-comment-tag-text: #2f3136;\n    --dark-color-ts: #c97dff;\n    --dark-color-ts-interface: #9cbe3c;\n    --dark-color-ts-enum: #d6ab29;\n    --dark-color-ts-class: #3695f3;\n    --dark-color-ts-private: #e2e2e2;\n    --dark-color-toolbar: #34373c;\n    --dark-color-toolbar-text: #ffffff;\n    --dark-icon-filter: invert(1);\n    --dark-external-icon: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='10' height='10'><path fill-opacity='0' stroke='%23fff' stroke-width='10' d='m43,35H5v60h60V57M45,5v10l10,10-30,30 20,20 30-30 10,10h10V5z'/></svg>\");\n}\n\n@media (prefers-color-scheme: light) {\n    :root {\n        --color-background: var(--light-color-background);\n        --color-secondary-background: var(--light-color-secondary-background);\n        --color-text: var(--light-color-text);\n        --color-text-aside: var(--light-color-text-aside);\n        --color-link: var(--light-color-link);\n        --color-menu-divider: var(--light-color-menu-divider);\n        --color-menu-divider-focus: var(--light-color-menu-divider-focus);\n        --color-menu-label: var(--light-color-menu-label);\n        --color-panel: var(--light-color-panel);\n        --color-panel-divider: var(--light-color-panel-divider);\n        --color-comment-tag: var(--light-color-comment-tag);\n        --color-comment-tag-text: var(--light-color-comment-tag-text);\n        --color-ts: var(--light-color-ts);\n        --color-ts-interface: var(--light-color-ts-interface);\n        --color-ts-enum: var(--light-color-ts-enum);\n        --color-ts-class: var(--light-color-ts-class);\n        --color-ts-private: var(--light-color-ts-private);\n        --color-toolbar: var(--light-color-toolbar);\n        --color-toolbar-text: var(--light-color-toolbar-text);\n        --icon-filter: var(--light-icon-filter);\n        --external-icon: var(--light-external-icon);\n    }\n}\n\n@media (prefers-color-scheme: dark) {\n    :root {\n        --color-background: var(--dark-color-background);\n        --color-secondary-background: var(--dark-color-secondary-background);\n        --color-text: var(--dark-color-text);\n        --color-text-aside: var(--dark-color-text-aside);\n        --color-link: var(--dark-color-link);\n        --color-menu-divider: var(--dark-color-menu-divider);\n        --color-menu-divider-focus: var(--dark-color-menu-divider-focus);\n        --color-menu-label: var(--dark-color-menu-label);\n        --color-panel: var(--dark-color-panel);\n        --color-panel-divider: var(--dark-color-panel-divider);\n        --color-comment-tag: var(--dark-color-comment-tag);\n        --color-comment-tag-text: var(--dark-color-comment-tag-text);\n        --color-ts: var(--dark-color-ts);\n        --color-ts-interface: var(--dark-color-ts-interface);\n        --color-ts-enum: var(--dark-color-ts-enum);\n        --color-ts-class: var(--dark-color-ts-class);\n        --color-ts-private: var(--dark-color-ts-private);\n        --color-toolbar: var(--dark-color-toolbar);\n        --color-toolbar-text: var(--dark-color-toolbar-text);\n        --icon-filter: var(--dark-icon-filter);\n        --external-icon: var(--dark-external-icon);\n    }\n}\n\nbody {\n    margin: 0;\n}\n\nbody.light {\n    --color-background: var(--light-color-background);\n    --color-secondary-background: var(--light-color-secondary-background);\n    --color-text: var(--light-color-text);\n    --color-text-aside: var(--light-color-text-aside);\n    --color-link: var(--light-color-link);\n    --color-menu-divider: var(--light-color-menu-divider);\n    --color-menu-divider-focus: var(--light-color-menu-divider-focus);\n    --color-menu-label: var(--light-color-menu-label);\n    --color-panel: var(--light-color-panel);\n    --color-panel-divider: var(--light-color-panel-divider);\n    --color-comment-tag: var(--light-color-comment-tag);\n    --color-comment-tag-text: var(--light-color-comment-tag-text);\n    --color-ts: var(--light-color-ts);\n    --color-ts-interface: var(--light-color-ts-interface);\n    --color-ts-enum: var(--light-color-ts-enum);\n    --color-ts-class: var(--light-color-ts-class);\n    --color-ts-private: var(--light-color-ts-private);\n    --color-toolbar: var(--light-color-toolbar);\n    --color-toolbar-text: var(--light-color-toolbar-text);\n    --icon-filter: var(--light-icon-filter);\n    --external-icon: var(--light-external-icon);\n}\n\nbody.dark {\n    --color-background: var(--dark-color-background);\n    --color-secondary-background: var(--dark-color-secondary-background);\n    --color-text: var(--dark-color-text);\n    --color-text-aside: var(--dark-color-text-aside);\n    --color-link: var(--dark-color-link);\n    --color-menu-divider: var(--dark-color-menu-divider);\n    --color-menu-divider-focus: var(--dark-color-menu-divider-focus);\n    --color-menu-label: var(--dark-color-menu-label);\n    --color-panel: var(--dark-color-panel);\n    --color-panel-divider: var(--dark-color-panel-divider);\n    --color-comment-tag: var(--dark-color-comment-tag);\n    --color-comment-tag-text: var(--dark-color-comment-tag-text);\n    --color-ts: var(--dark-color-ts);\n    --color-ts-interface: var(--dark-color-ts-interface);\n    --color-ts-enum: var(--dark-color-ts-enum);\n    --color-ts-class: var(--dark-color-ts-class);\n    --color-ts-private: var(--dark-color-ts-private);\n    --color-toolbar: var(--dark-color-toolbar);\n    --color-toolbar-text: var(--dark-color-toolbar-text);\n    --icon-filter: var(--dark-icon-filter);\n    --external-icon: var(--dark-external-icon);\n}\n\nh1 {\n    font-size: 2em;\n    margin: 0.67em 0;\n}\n\nh2 {\n    font-size: 1.5em;\n    margin: 0.83em 0;\n}\n\nh3 {\n    font-size: 1.17em;\n    margin: 1em 0;\n}\n\nh4,\n.tsd-index-panel h3 {\n    font-size: 1em;\n    margin: 1.33em 0;\n}\n\nh5 {\n    font-size: 0.83em;\n    margin: 1.67em 0;\n}\n\nh6 {\n    font-size: 0.67em;\n    margin: 2.33em 0;\n}\n\npre {\n    white-space: pre;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n}\n\ndl,\nmenu,\nol,\nul {\n    margin: 1em 0;\n}\n\ndd {\n    margin: 0 0 0 40px;\n}\n\n.container {\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 0 40px;\n}\n@media (max-width: 640px) {\n    .container {\n        padding: 0 20px;\n    }\n}\n\n.container-main {\n    padding-bottom: 200px;\n}\n\n.row {\n    display: flex;\n    position: relative;\n    margin: 0 -10px;\n}\n.row:after {\n    visibility: hidden;\n    display: block;\n    content: \"\";\n    clear: both;\n    height: 0;\n}\n\n.col-4,\n.col-8 {\n    box-sizing: border-box;\n    float: left;\n    padding: 0 10px;\n}\n\n.col-4 {\n    width: 33.3333333333%;\n}\n.col-8 {\n    width: 66.6666666667%;\n}\n\nul.tsd-descriptions > li > :first-child,\n.tsd-panel > :first-child,\n.col-8 > :first-child,\n.col-4 > :first-child,\nul.tsd-descriptions > li > :first-child > :first-child,\n.tsd-panel > :first-child > :first-child,\n.col-8 > :first-child > :first-child,\n.col-4 > :first-child > :first-child,\nul.tsd-descriptions > li > :first-child > :first-child > :first-child,\n.tsd-panel > :first-child > :first-child > :first-child,\n.col-8 > :first-child > :first-child > :first-child,\n.col-4 > :first-child > :first-child > :first-child {\n    margin-top: 0;\n}\nul.tsd-descriptions > li > :last-child,\n.tsd-panel > :last-child,\n.col-8 > :last-child,\n.col-4 > :last-child,\nul.tsd-descriptions > li > :last-child > :last-child,\n.tsd-panel > :last-child > :last-child,\n.col-8 > :last-child > :last-child,\n.col-4 > :last-child > :last-child,\nul.tsd-descriptions > li > :last-child > :last-child > :last-child,\n.tsd-panel > :last-child > :last-child > :last-child,\n.col-8 > :last-child > :last-child > :last-child,\n.col-4 > :last-child > :last-child > :last-child {\n    margin-bottom: 0;\n}\n\n@keyframes fade-in {\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n}\n@keyframes fade-out {\n    from {\n        opacity: 1;\n        visibility: visible;\n    }\n    to {\n        opacity: 0;\n    }\n}\n@keyframes fade-in-delayed {\n    0% {\n        opacity: 0;\n    }\n    33% {\n        opacity: 0;\n    }\n    100% {\n        opacity: 1;\n    }\n}\n@keyframes fade-out-delayed {\n    0% {\n        opacity: 1;\n        visibility: visible;\n    }\n    66% {\n        opacity: 0;\n    }\n    100% {\n        opacity: 0;\n    }\n}\n@keyframes shift-to-left {\n    from {\n        transform: translate(0, 0);\n    }\n    to {\n        transform: translate(-25%, 0);\n    }\n}\n@keyframes unshift-to-left {\n    from {\n        transform: translate(-25%, 0);\n    }\n    to {\n        transform: translate(0, 0);\n    }\n}\n@keyframes pop-in-from-right {\n    from {\n        transform: translate(100%, 0);\n    }\n    to {\n        transform: translate(0, 0);\n    }\n}\n@keyframes pop-out-to-right {\n    from {\n        transform: translate(0, 0);\n        visibility: visible;\n    }\n    to {\n        transform: translate(100%, 0);\n    }\n}\nbody {\n    background: var(--color-background);\n    font-family: \"Segoe UI\", sans-serif;\n    font-size: 16px;\n    color: var(--color-text);\n}\n\na {\n    color: var(--color-link);\n    text-decoration: none;\n}\na:hover {\n    text-decoration: underline;\n}\na.external[target=\"_blank\"] {\n    background-image: var(--external-icon);\n    background-position: top 3px right;\n    background-repeat: no-repeat;\n    padding-right: 13px;\n}\n\ncode,\npre {\n    font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    padding: 0.2em;\n    margin: 0;\n    font-size: 14px;\n}\n\npre {\n    padding: 10px;\n}\npre code {\n    padding: 0;\n    font-size: 100%;\n}\n\nblockquote {\n    margin: 1em 0;\n    padding-left: 1em;\n    border-left: 4px solid gray;\n}\n\n.tsd-typography {\n    line-height: 1.333em;\n}\n.tsd-typography ul {\n    list-style: square;\n    padding: 0 0 0 20px;\n    margin: 0;\n}\n.tsd-typography h4,\n.tsd-typography .tsd-index-panel h3,\n.tsd-index-panel .tsd-typography h3,\n.tsd-typography h5,\n.tsd-typography h6 {\n    font-size: 1em;\n    margin: 0;\n}\n.tsd-typography h5,\n.tsd-typography h6 {\n    font-weight: normal;\n}\n.tsd-typography p,\n.tsd-typography ul,\n.tsd-typography ol {\n    margin: 1em 0;\n}\n\n@media (min-width: 901px) and (max-width: 1024px) {\n    html .col-content {\n        width: 72%;\n    }\n    html .col-menu {\n        width: 28%;\n    }\n    html .tsd-navigation {\n        padding-left: 10px;\n    }\n}\n@media (max-width: 900px) {\n    html .col-content {\n        float: none;\n        width: 100%;\n    }\n    html .col-menu {\n        position: fixed !important;\n        overflow: auto;\n        -webkit-overflow-scrolling: touch;\n        z-index: 1024;\n        top: 0 !important;\n        bottom: 0 !important;\n        left: auto !important;\n        right: 0 !important;\n        width: 100%;\n        padding: 20px 20px 0 0;\n        max-width: 450px;\n        visibility: hidden;\n        background-color: var(--color-panel);\n        transform: translate(100%, 0);\n    }\n    html .col-menu > *:last-child {\n        padding-bottom: 20px;\n    }\n    html .overlay {\n        content: \"\";\n        display: block;\n        position: fixed;\n        z-index: 1023;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: rgba(0, 0, 0, 0.75);\n        visibility: hidden;\n    }\n\n    .to-has-menu .overlay {\n        animation: fade-in 0.4s;\n    }\n\n    .to-has-menu :is(header, footer, .col-content) {\n        animation: shift-to-left 0.4s;\n    }\n\n    .to-has-menu .col-menu {\n        animation: pop-in-from-right 0.4s;\n    }\n\n    .from-has-menu .overlay {\n        animation: fade-out 0.4s;\n    }\n\n    .from-has-menu :is(header, footer, .col-content) {\n        animation: unshift-to-left 0.4s;\n    }\n\n    .from-has-menu .col-menu {\n        animation: pop-out-to-right 0.4s;\n    }\n\n    .has-menu body {\n        overflow: hidden;\n    }\n    .has-menu .overlay {\n        visibility: visible;\n    }\n    .has-menu :is(header, footer, .col-content) {\n        transform: translate(-25%, 0);\n    }\n    .has-menu .col-menu {\n        visibility: visible;\n        transform: translate(0, 0);\n        display: grid;\n        grid-template-rows: auto 1fr;\n        max-height: 100vh;\n    }\n    .has-menu .tsd-navigation {\n        max-height: 100%;\n    }\n}\n\n.tsd-page-title {\n    padding: 70px 0 20px 0;\n    margin: 0 0 40px 0;\n    background: var(--color-panel);\n    box-shadow: 0 0 5px rgba(0, 0, 0, 0.35);\n}\n.tsd-page-title h1 {\n    margin: 0;\n}\n\n.tsd-breadcrumb {\n    margin: 0;\n    padding: 0;\n    color: var(--color-text-aside);\n}\n.tsd-breadcrumb a {\n    color: var(--color-text-aside);\n    text-decoration: none;\n}\n.tsd-breadcrumb a:hover {\n    text-decoration: underline;\n}\n.tsd-breadcrumb li {\n    display: inline;\n}\n.tsd-breadcrumb li:after {\n    content: \" / \";\n}\n\ndl.tsd-comment-tags {\n    overflow: hidden;\n}\ndl.tsd-comment-tags dt {\n    float: left;\n    padding: 1px 5px;\n    margin: 0 10px 0 0;\n    border-radius: 4px;\n    border: 1px solid var(--color-comment-tag);\n    color: var(--color-comment-tag);\n    font-size: 0.8em;\n    font-weight: normal;\n}\ndl.tsd-comment-tags dd {\n    margin: 0 0 10px 0;\n}\ndl.tsd-comment-tags dd:before,\ndl.tsd-comment-tags dd:after {\n    display: table;\n    content: \" \";\n}\ndl.tsd-comment-tags dd pre,\ndl.tsd-comment-tags dd:after {\n    clear: both;\n}\ndl.tsd-comment-tags p {\n    margin: 0;\n}\n\n.tsd-panel.tsd-comment .lead {\n    font-size: 1.1em;\n    line-height: 1.333em;\n    margin-bottom: 2em;\n}\n.tsd-panel.tsd-comment .lead:last-child {\n    margin-bottom: 0;\n}\n\n.toggle-protected .tsd-is-private {\n    display: none;\n}\n\n.toggle-public .tsd-is-private,\n.toggle-public .tsd-is-protected,\n.toggle-public .tsd-is-private-protected {\n    display: none;\n}\n\n.toggle-inherited .tsd-is-inherited {\n    display: none;\n}\n\n.toggle-externals .tsd-is-external {\n    display: none;\n}\n\n#tsd-filter {\n    position: relative;\n    display: inline-block;\n    height: 40px;\n    vertical-align: bottom;\n}\n.no-filter #tsd-filter {\n    display: none;\n}\n#tsd-filter .tsd-filter-group {\n    display: inline-block;\n    height: 40px;\n    vertical-align: bottom;\n    white-space: nowrap;\n}\n#tsd-filter input {\n    display: none;\n}\n@media (max-width: 900px) {\n    #tsd-filter .tsd-filter-group {\n        display: block;\n        position: absolute;\n        top: 40px;\n        right: 20px;\n        height: auto;\n        background-color: var(--color-panel);\n        visibility: hidden;\n        transform: translate(50%, 0);\n        box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);\n    }\n    .has-options #tsd-filter .tsd-filter-group {\n        visibility: visible;\n    }\n    .to-has-options #tsd-filter .tsd-filter-group {\n        animation: fade-in 0.2s;\n    }\n    .from-has-options #tsd-filter .tsd-filter-group {\n        animation: fade-out 0.2s;\n    }\n    #tsd-filter label,\n    #tsd-filter .tsd-select {\n        display: block;\n        padding-right: 20px;\n    }\n}\n\nfooter {\n    border-top: 1px solid var(--color-panel-divider);\n    background-color: var(--color-panel);\n}\nfooter:after {\n    content: \"\";\n    display: table;\n}\nfooter.with-border-bottom {\n    border-bottom: 1px solid var(--color-panel-divider);\n}\nfooter .tsd-legend-group {\n    font-size: 0;\n}\nfooter .tsd-legend {\n    display: inline-block;\n    width: 25%;\n    padding: 0;\n    font-size: 16px;\n    list-style: none;\n    line-height: 1.333em;\n    vertical-align: top;\n}\n@media (max-width: 900px) {\n    footer .tsd-legend {\n        width: 50%;\n    }\n}\n\n.tsd-hierarchy {\n    list-style: square;\n    padding: 0 0 0 20px;\n    margin: 0;\n}\n.tsd-hierarchy .target {\n    font-weight: bold;\n}\n\n.tsd-index-panel .tsd-index-content {\n    margin-bottom: -30px !important;\n}\n.tsd-index-panel .tsd-index-section {\n    margin-bottom: 30px !important;\n}\n.tsd-index-panel h3 {\n    margin: 0 -20px 10px -20px;\n    padding: 0 20px 10px 20px;\n    border-bottom: 1px solid var(--color-panel-divider);\n}\n.tsd-index-panel ul.tsd-index-list {\n    -webkit-column-count: 3;\n    -moz-column-count: 3;\n    -ms-column-count: 3;\n    -o-column-count: 3;\n    column-count: 3;\n    -webkit-column-gap: 20px;\n    -moz-column-gap: 20px;\n    -ms-column-gap: 20px;\n    -o-column-gap: 20px;\n    column-gap: 20px;\n    padding: 0;\n    list-style: none;\n    line-height: 1.333em;\n}\n@media (max-width: 900px) {\n    .tsd-index-panel ul.tsd-index-list {\n        -webkit-column-count: 1;\n        -moz-column-count: 1;\n        -ms-column-count: 1;\n        -o-column-count: 1;\n        column-count: 1;\n    }\n}\n@media (min-width: 901px) and (max-width: 1024px) {\n    .tsd-index-panel ul.tsd-index-list {\n        -webkit-column-count: 2;\n        -moz-column-count: 2;\n        -ms-column-count: 2;\n        -o-column-count: 2;\n        column-count: 2;\n    }\n}\n.tsd-index-panel ul.tsd-index-list li {\n    -webkit-page-break-inside: avoid;\n    -moz-page-break-inside: avoid;\n    -ms-page-break-inside: avoid;\n    -o-page-break-inside: avoid;\n    page-break-inside: avoid;\n}\n.tsd-index-panel a,\n.tsd-index-panel .tsd-parent-kind-module a {\n    color: var(--color-ts);\n}\n.tsd-index-panel .tsd-parent-kind-interface a {\n    color: var(--color-ts-interface);\n}\n.tsd-index-panel .tsd-parent-kind-enum a {\n    color: var(--color-ts-enum);\n}\n.tsd-index-panel .tsd-parent-kind-class a {\n    color: var(--color-ts-class);\n}\n.tsd-index-panel .tsd-kind-module a {\n    color: var(--color-ts);\n}\n.tsd-index-panel .tsd-kind-interface a {\n    color: var(--color-ts-interface);\n}\n.tsd-index-panel .tsd-kind-enum a {\n    color: var(--color-ts-enum);\n}\n.tsd-index-panel .tsd-kind-class a {\n    color: var(--color-ts-class);\n}\n.tsd-index-panel .tsd-is-private a {\n    color: var(--color-ts-private);\n}\n\n.tsd-flag {\n    display: inline-block;\n    padding: 1px 5px;\n    border-radius: 4px;\n    color: var(--color-comment-tag-text);\n    background-color: var(--color-comment-tag);\n    text-indent: 0;\n    font-size: 14px;\n    font-weight: normal;\n}\n\n.tsd-anchor {\n    position: absolute;\n    top: -100px;\n}\n\n.tsd-member {\n    position: relative;\n}\n.tsd-member .tsd-anchor + h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n    border-bottom: none;\n}\n.tsd-member [data-tsd-kind] {\n    color: var(--color-ts);\n}\n.tsd-member [data-tsd-kind=\"Interface\"] {\n    color: var(--color-ts-interface);\n}\n.tsd-member [data-tsd-kind=\"Enum\"] {\n    color: var(--color-ts-enum);\n}\n.tsd-member [data-tsd-kind=\"Class\"] {\n    color: var(--color-ts-class);\n}\n.tsd-member [data-tsd-kind=\"Private\"] {\n    color: var(--color-ts-private);\n}\n\n.tsd-navigation {\n    margin: 0 0 0 40px;\n}\n.tsd-navigation a {\n    display: block;\n    padding-top: 2px;\n    padding-bottom: 2px;\n    border-left: 2px solid transparent;\n    color: var(--color-text);\n    text-decoration: none;\n    transition: border-left-color 0.1s;\n}\n.tsd-navigation a:hover {\n    text-decoration: underline;\n}\n.tsd-navigation ul {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n}\n.tsd-navigation li {\n    padding: 0;\n}\n\n.tsd-navigation.primary {\n    padding-bottom: 40px;\n}\n.tsd-navigation.primary a {\n    display: block;\n    padding-top: 6px;\n    padding-bottom: 6px;\n}\n.tsd-navigation.primary ul li a {\n    padding-left: 5px;\n}\n.tsd-navigation.primary ul li li a {\n    padding-left: 25px;\n}\n.tsd-navigation.primary ul li li li a {\n    padding-left: 45px;\n}\n.tsd-navigation.primary ul li li li li a {\n    padding-left: 65px;\n}\n.tsd-navigation.primary ul li li li li li a {\n    padding-left: 85px;\n}\n.tsd-navigation.primary ul li li li li li li a {\n    padding-left: 105px;\n}\n.tsd-navigation.primary > ul {\n    border-bottom: 1px solid var(--color-panel-divider);\n}\n.tsd-navigation.primary li {\n    border-top: 1px solid var(--color-panel-divider);\n}\n.tsd-navigation.primary li.current > a {\n    font-weight: bold;\n}\n.tsd-navigation.primary li.label span {\n    display: block;\n    padding: 20px 0 6px 5px;\n    color: var(--color-menu-label);\n}\n.tsd-navigation.primary li.globals + li > span,\n.tsd-navigation.primary li.globals + li > a {\n    padding-top: 20px;\n}\n\n.tsd-navigation.secondary {\n    max-height: calc(100vh - 1rem - 40px);\n    overflow: auto;\n    position: sticky;\n    top: calc(0.5rem + 40px);\n    transition: 0.3s;\n}\n.tsd-navigation.secondary.tsd-navigation--toolbar-hide {\n    max-height: calc(100vh - 1rem);\n    top: 0.5rem;\n}\n.tsd-navigation.secondary ul {\n    transition: opacity 0.2s;\n}\n.tsd-navigation.secondary ul li a {\n    padding-left: 25px;\n}\n.tsd-navigation.secondary ul li li a {\n    padding-left: 45px;\n}\n.tsd-navigation.secondary ul li li li a {\n    padding-left: 65px;\n}\n.tsd-navigation.secondary ul li li li li a {\n    padding-left: 85px;\n}\n.tsd-navigation.secondary ul li li li li li a {\n    padding-left: 105px;\n}\n.tsd-navigation.secondary ul li li li li li li a {\n    padding-left: 125px;\n}\n.tsd-navigation.secondary ul.current a {\n    border-left-color: var(--color-panel-divider);\n}\n.tsd-navigation.secondary li.focus > a,\n.tsd-navigation.secondary ul.current li.focus > a {\n    border-left-color: var(--color-menu-divider-focus);\n}\n.tsd-navigation.secondary li.current {\n    margin-top: 20px;\n    margin-bottom: 20px;\n    border-left-color: var(--color-panel-divider);\n}\n.tsd-navigation.secondary li.current > a {\n    font-weight: bold;\n}\n\n@media (min-width: 901px) {\n    .menu-sticky-wrap {\n        position: static;\n    }\n}\n\n.tsd-panel {\n    margin: 20px 0;\n    padding: 20px;\n    background-color: var(--color-panel);\n    box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);\n}\n.tsd-panel:empty {\n    display: none;\n}\n.tsd-panel > h1,\n.tsd-panel > h2,\n.tsd-panel > h3 {\n    margin: 1.5em -20px 10px -20px;\n    padding: 0 20px 10px 20px;\n    border-bottom: 1px solid var(--color-panel-divider);\n}\n.tsd-panel > h1.tsd-before-signature,\n.tsd-panel > h2.tsd-before-signature,\n.tsd-panel > h3.tsd-before-signature {\n    margin-bottom: 0;\n    border-bottom: 0;\n}\n.tsd-panel table {\n    display: block;\n    width: 100%;\n    overflow: auto;\n    margin-top: 10px;\n    word-break: normal;\n    word-break: keep-all;\n    border-collapse: collapse;\n}\n.tsd-panel table th {\n    font-weight: bold;\n}\n.tsd-panel table th,\n.tsd-panel table td {\n    padding: 6px 13px;\n    border: 1px solid var(--color-panel-divider);\n}\n.tsd-panel table tr {\n    background: var(--color-background);\n}\n.tsd-panel table tr:nth-child(even) {\n    background: var(--color-secondary-background);\n}\n\n.tsd-panel-group {\n    margin: 60px 0;\n}\n.tsd-panel-group > h1,\n.tsd-panel-group > h2,\n.tsd-panel-group > h3 {\n    padding-left: 20px;\n    padding-right: 20px;\n}\n\n#tsd-search {\n    transition: background-color 0.2s;\n}\n#tsd-search .title {\n    position: relative;\n    z-index: 2;\n}\n#tsd-search .field {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 40px;\n    height: 40px;\n}\n#tsd-search .field input {\n    box-sizing: border-box;\n    position: relative;\n    top: -50px;\n    z-index: 1;\n    width: 100%;\n    padding: 0 10px;\n    opacity: 0;\n    outline: 0;\n    border: 0;\n    background: transparent;\n    color: var(--color-text);\n}\n#tsd-search .field label {\n    position: absolute;\n    overflow: hidden;\n    right: -40px;\n}\n#tsd-search .field input,\n#tsd-search .title {\n    transition: opacity 0.2s;\n}\n#tsd-search .results {\n    position: absolute;\n    visibility: hidden;\n    top: 40px;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);\n}\n#tsd-search .results li {\n    padding: 0 10px;\n    background-color: var(--color-background);\n}\n#tsd-search .results li:nth-child(even) {\n    background-color: var(--color-panel);\n}\n#tsd-search .results li.state {\n    display: none;\n}\n#tsd-search .results li.current,\n#tsd-search .results li:hover {\n    background-color: var(--color-panel-divider);\n}\n#tsd-search .results a {\n    display: block;\n}\n#tsd-search .results a:before {\n    top: 10px;\n}\n#tsd-search .results span.parent {\n    color: var(--color-text-aside);\n    font-weight: normal;\n}\n#tsd-search.has-focus {\n    background-color: var(--color-panel-divider);\n}\n#tsd-search.has-focus .field input {\n    top: 0;\n    opacity: 1;\n}\n#tsd-search.has-focus .title {\n    z-index: 0;\n    opacity: 0;\n}\n#tsd-search.has-focus .results {\n    visibility: visible;\n}\n#tsd-search.loading .results li.state.loading {\n    display: block;\n}\n#tsd-search.failure .results li.state.failure {\n    display: block;\n}\n\n.tsd-signature {\n    margin: 0 0 1em 0;\n    padding: 10px;\n    border: 1px solid var(--color-panel-divider);\n    font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-size: 14px;\n    overflow-x: auto;\n}\n.tsd-signature.tsd-kind-icon {\n    padding-left: 30px;\n}\n.tsd-signature.tsd-kind-icon:before {\n    top: 10px;\n    left: 10px;\n}\n.tsd-panel > .tsd-signature {\n    margin-left: -20px;\n    margin-right: -20px;\n    border-width: 1px 0;\n}\n.tsd-panel > .tsd-signature.tsd-kind-icon {\n    padding-left: 40px;\n}\n.tsd-panel > .tsd-signature.tsd-kind-icon:before {\n    left: 20px;\n}\n\n.tsd-signature-symbol {\n    color: var(--color-text-aside);\n    font-weight: normal;\n}\n\n.tsd-signature-type {\n    font-style: italic;\n    font-weight: normal;\n}\n\n.tsd-signatures {\n    padding: 0;\n    margin: 0 0 1em 0;\n    border: 1px solid var(--color-panel-divider);\n}\n.tsd-signatures .tsd-signature {\n    margin: 0;\n    border-width: 1px 0 0 0;\n    transition: background-color 0.1s;\n}\n.tsd-signatures .tsd-signature:first-child {\n    border-top-width: 0;\n}\n.tsd-signatures .tsd-signature.current {\n    background-color: var(--color-panel-divider);\n}\n.tsd-signatures.active > .tsd-signature {\n    cursor: pointer;\n}\n.tsd-panel > .tsd-signatures {\n    margin-left: -20px;\n    margin-right: -20px;\n    border-width: 1px 0;\n}\n.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon {\n    padding-left: 40px;\n}\n.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before {\n    left: 20px;\n}\n.tsd-panel > a.anchor + .tsd-signatures {\n    border-top-width: 0;\n    margin-top: -20px;\n}\n\nul.tsd-descriptions {\n    position: relative;\n    overflow: hidden;\n    padding: 0;\n    list-style: none;\n}\nul.tsd-descriptions.active > .tsd-description {\n    display: none;\n}\nul.tsd-descriptions.active > .tsd-description.current {\n    display: block;\n}\nul.tsd-descriptions.active > .tsd-description.fade-in {\n    animation: fade-in-delayed 0.3s;\n}\nul.tsd-descriptions.active > .tsd-description.fade-out {\n    animation: fade-out-delayed 0.3s;\n    position: absolute;\n    display: block;\n    top: 0;\n    left: 0;\n    right: 0;\n    opacity: 0;\n    visibility: hidden;\n}\nul.tsd-descriptions h4,\nul.tsd-descriptions .tsd-index-panel h3,\n.tsd-index-panel ul.tsd-descriptions h3 {\n    font-size: 16px;\n    margin: 1em 0 0.5em 0;\n}\n\nul.tsd-parameters,\nul.tsd-type-parameters {\n    list-style: square;\n    margin: 0;\n    padding-left: 20px;\n}\nul.tsd-parameters > li.tsd-parameter-signature,\nul.tsd-type-parameters > li.tsd-parameter-signature {\n    list-style: none;\n    margin-left: -20px;\n}\nul.tsd-parameters h5,\nul.tsd-type-parameters h5 {\n    font-size: 16px;\n    margin: 1em 0 0.5em 0;\n}\nul.tsd-parameters .tsd-comment,\nul.tsd-type-parameters .tsd-comment {\n    margin-top: -0.5em;\n}\n\n.tsd-sources {\n    font-size: 14px;\n    color: var(--color-text-aside);\n    margin: 0 0 1em 0;\n}\n.tsd-sources a {\n    color: var(--color-text-aside);\n    text-decoration: underline;\n}\n.tsd-sources ul,\n.tsd-sources p {\n    margin: 0 !important;\n}\n.tsd-sources ul {\n    list-style: none;\n    padding: 0;\n}\n\n.tsd-page-toolbar {\n    position: fixed;\n    z-index: 1;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 40px;\n    color: var(--color-toolbar-text);\n    background: var(--color-toolbar);\n    border-bottom: 1px solid var(--color-panel-divider);\n    transition: transform 0.3s linear;\n}\n.tsd-page-toolbar a {\n    color: var(--color-toolbar-text);\n    text-decoration: none;\n}\n.tsd-page-toolbar a.title {\n    font-weight: bold;\n}\n.tsd-page-toolbar a.title:hover {\n    text-decoration: underline;\n}\n.tsd-page-toolbar .table-wrap {\n    display: table;\n    width: 100%;\n    height: 40px;\n}\n.tsd-page-toolbar .table-cell {\n    display: table-cell;\n    position: relative;\n    white-space: nowrap;\n    line-height: 40px;\n}\n.tsd-page-toolbar .table-cell:first-child {\n    width: 100%;\n}\n\n.tsd-page-toolbar--hide {\n    transform: translateY(-100%);\n}\n\n.tsd-select .tsd-select-list li:before,\n.tsd-select .tsd-select-label:before,\n.tsd-widget:before {\n    content: \"\";\n    display: inline-block;\n    width: 40px;\n    height: 40px;\n    margin: 0 -8px 0 0;\n    background-image: url(./widgets.png);\n    background-repeat: no-repeat;\n    text-indent: -1024px;\n    vertical-align: bottom;\n    filter: var(--icon-filter);\n}\n@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {\n    .tsd-select .tsd-select-list li:before,\n    .tsd-select .tsd-select-label:before,\n    .tsd-widget:before {\n        background-image: url(./widgets@2x.png);\n        background-size: 320px 40px;\n    }\n}\n\n.tsd-widget {\n    display: inline-block;\n    overflow: hidden;\n    opacity: 0.8;\n    height: 40px;\n    transition: opacity 0.1s, background-color 0.2s;\n    vertical-align: bottom;\n    cursor: pointer;\n}\n.tsd-widget:hover {\n    opacity: 0.9;\n}\n.tsd-widget.active {\n    opacity: 1;\n    background-color: var(--color-panel-divider);\n}\n.tsd-widget.no-caption {\n    width: 40px;\n}\n.tsd-widget.no-caption:before {\n    margin: 0;\n}\n.tsd-widget.search:before {\n    background-position: 0 0;\n}\n.tsd-widget.menu:before {\n    background-position: -40px 0;\n}\n.tsd-widget.options:before {\n    background-position: -80px 0;\n}\n.tsd-widget.options,\n.tsd-widget.menu {\n    display: none;\n}\n@media (max-width: 900px) {\n    .tsd-widget.options,\n    .tsd-widget.menu {\n        display: inline-block;\n    }\n}\ninput[type=\"checkbox\"] + .tsd-widget:before {\n    background-position: -120px 0;\n}\ninput[type=\"checkbox\"]:checked + .tsd-widget:before {\n    background-position: -160px 0;\n}\n\n.tsd-select {\n    position: relative;\n    display: inline-block;\n    height: 40px;\n    transition: opacity 0.1s, background-color 0.2s;\n    vertical-align: bottom;\n    cursor: pointer;\n}\n.tsd-select .tsd-select-label {\n    opacity: 0.6;\n    transition: opacity 0.2s;\n}\n.tsd-select .tsd-select-label:before {\n    background-position: -240px 0;\n}\n.tsd-select.active .tsd-select-label {\n    opacity: 0.8;\n}\n.tsd-select.active .tsd-select-list {\n    visibility: visible;\n    opacity: 1;\n    transition-delay: 0s;\n}\n.tsd-select .tsd-select-list {\n    position: absolute;\n    visibility: hidden;\n    top: 40px;\n    left: 0;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    list-style: none;\n    box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);\n    transition: visibility 0s 0.2s, opacity 0.2s;\n}\n.tsd-select .tsd-select-list li {\n    padding: 0 20px 0 0;\n    background-color: var(--color-background);\n}\n.tsd-select .tsd-select-list li:before {\n    background-position: 40px 0;\n}\n.tsd-select .tsd-select-list li:nth-child(even) {\n    background-color: var(--color-panel);\n}\n.tsd-select .tsd-select-list li:hover {\n    background-color: var(--color-panel-divider);\n}\n.tsd-select .tsd-select-list li.selected:before {\n    background-position: -200px 0;\n}\n@media (max-width: 900px) {\n    .tsd-select .tsd-select-list {\n        top: 0;\n        left: auto;\n        right: 100%;\n        margin-right: -5px;\n    }\n    .tsd-select .tsd-select-label:before {\n        background-position: -280px 0;\n    }\n}\n\nimg {\n    max-width: 100%;\n}\n"
  },
  {
    "path": "docs/reference/classes/meyda_wa.MeydaAnalyzer.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>MeydaAnalyzer | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"../modules/meyda_wa.html\">meyda-wa</a></li><li><a href=\"meyda_wa.MeydaAnalyzer.html\">MeydaAnalyzer</a></li></ul><h1>Class MeydaAnalyzer</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel tsd-comment\"><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Meyda&#39;s interface to the Web Audio API. MeydaAnalyzer abstracts an API on\ntop of the Web Audio API&#39;s ScriptProcessorNode, running the Meyda audio\nfeature extractors inside that context.</p>\n</div><div><p>MeydaAnalyzer&#39;s constructor should not be called directly - MeydaAnalyzer\nobjects should be generated using the <a href=\"../interfaces/Meyda.default.html#createMeydaAnalyzer\">createMeydaAnalyzer</a>\nfactory function in the main Meyda class.</p>\n<p>Options are of type <a href=\"../interfaces/meyda_wa.MeydaAnalyzerOptions.html\">MeydaAnalyzerOptions</a>.</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-0\">const</span><span class=\"hl-1\"> </span><span class=\"hl-2\">analyzer</span><span class=\"hl-1\"> = </span><span class=\"hl-3\">Meyda</span><span class=\"hl-1\">.</span><span class=\"hl-4\">createMeydaAnalyzer</span><span class=\"hl-1\">({</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;audioContext&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-3\">audioContext</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;source&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-3\">source</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;bufferSize&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-6\">512</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;featureExtractors&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> [</span><span class=\"hl-5\">&quot;rms&quot;</span><span class=\"hl-1\">],</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;inputs&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-6\">2</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;numberOfMFCCCoefficients&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-6\">20</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;callback&quot;</span><span class=\"hl-1\">: </span><span class=\"hl-3\">features</span><span class=\"hl-1\"> </span><span class=\"hl-0\">=&gt;</span><span class=\"hl-1\"> {</span><br/><span class=\"hl-1\">    </span><span class=\"hl-3\">levelRangeElement</span><span class=\"hl-1\">.</span><span class=\"hl-3\">value</span><span class=\"hl-1\"> = </span><span class=\"hl-3\">features</span><span class=\"hl-1\">.</span><span class=\"hl-3\">rms</span><span class=\"hl-1\">;</span><br/><span class=\"hl-1\">  }</span><br/><span class=\"hl-1\">});</span>\n</code></pre>\n</dd></dl></div></section><section class=\"tsd-panel tsd-hierarchy\"><h3>Hierarchy</h3><ul class=\"tsd-hierarchy\"><li><span class=\"target\">MeydaAnalyzer</span></li></ul></section><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Methods</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#get\" class=\"tsd-kind-icon\">get</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#setChannel\" class=\"tsd-kind-icon\">set<wbr/>Channel</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#setSource\" class=\"tsd-kind-icon\">set<wbr/>Source</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#start\" class=\"tsd-kind-icon\">start</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#stop\" class=\"tsd-kind-icon\">stop</a></li></ul></section></div></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Methods</h2><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class\"><a id=\"get\" class=\"tsd-anchor\"></a><h3>get</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-class\"><li class=\"tsd-signature tsd-kind-icon\">get<span class=\"tsd-signature-symbol\">(</span>features<span class=\"tsd-signature-symbol\">?: </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-symbol\">readonly </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">null</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"../interfaces/Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L275\">src/meyda-wa.ts:275</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Get a set of features from the current frame.</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-3\">analyzer</span><span class=\"hl-1\">.</span><span class=\"hl-4\">get</span><span class=\"hl-1\">(</span><span class=\"hl-5\">&#39;spectralFlatness&#39;</span><span class=\"hl-1\">);</span>\n</code></pre>\n</dd></dl></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5><span class=\"tsd-flag ts-flagOptional\">Optional</span> features: <a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-symbol\">readonly </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">null</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"../interfaces/Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span></h4></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class\"><a id=\"setChannel\" class=\"tsd-anchor\"></a><h3>set<wbr/>Channel</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-class\"><li class=\"tsd-signature tsd-kind-icon\">set<wbr/>Channel<span class=\"tsd-signature-symbol\">(</span>channel<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">void</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L256\">src/meyda-wa.ts:256</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Set the channel of the audio node for Meyda to listen to</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-3\">analyzer</span><span class=\"hl-1\">.</span><span class=\"hl-4\">setChannel</span><span class=\"hl-1\">(</span><span class=\"hl-6\">0</span><span class=\"hl-1\">);</span>\n</code></pre>\n</dd></dl></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>channel: <span class=\"tsd-signature-type\">number</span></h5><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>the index of the channel on the input audio node\nfor Meyda to listen to.</p>\n</div></div></li></ul><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">void</span></h4></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class\"><a id=\"setSource\" class=\"tsd-anchor\"></a><h3>set<wbr/>Source</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-class\"><li class=\"tsd-signature tsd-kind-icon\">set<wbr/>Source<span class=\"tsd-signature-symbol\">(</span>source<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">AudioNode</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">void</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L241\">src/meyda-wa.ts:241</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Set the Audio Node for Meyda to listen to.</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-3\">analyzer</span><span class=\"hl-1\">.</span><span class=\"hl-4\">setSource</span><span class=\"hl-1\">(</span><span class=\"hl-3\">audioSourceNode</span><span class=\"hl-1\">);</span>\n</code></pre>\n</dd></dl></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>source: <span class=\"tsd-signature-type\">AudioNode</span></h5><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The Audio Node for Meyda to listen to</p>\n</div></div></li></ul><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">void</span></h4></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class\"><a id=\"start\" class=\"tsd-anchor\"></a><h3>start</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-class\"><li class=\"tsd-signature tsd-kind-icon\">start<span class=\"tsd-signature-symbol\">(</span>features<span class=\"tsd-signature-symbol\">?: </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-symbol\">readonly </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">void</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L217\">src/meyda-wa.ts:217</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Start feature extraction\nThe audio features will be passed to the callback function that was defined\nin the MeydaOptions that were passed to the factory when constructing the\nMeydaAnalyzer.</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-3\">analyzer</span><span class=\"hl-1\">.</span><span class=\"hl-4\">start</span><span class=\"hl-1\">(</span><span class=\"hl-5\">&#39;chroma&#39;</span><span class=\"hl-1\">);</span>\n</code></pre>\n</dd></dl></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5><span class=\"tsd-flag ts-flagOptional\">Optional</span> features: <a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-symbol\">readonly </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">void</span></h4></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class\"><a id=\"stop\" class=\"tsd-anchor\"></a><h3>stop</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-class\"><li class=\"tsd-signature tsd-kind-icon\">stop<span class=\"tsd-signature-symbol\">(</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">void</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L229\">src/meyda-wa.ts:229</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Stop feature extraction.</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-3\">analyzer</span><span class=\"hl-1\">.</span><span class=\"hl-4\">stop</span><span class=\"hl-1\">();</span>\n</code></pre>\n</dd></dl></div><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">void</span></h4></li></ul></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\" tsd-kind-module\"><a href=\"../modules/Meyda.html\">Meyda</a></li><li class=\"current tsd-kind-module\"><a href=\"../modules/meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"current tsd-kind-class tsd-parent-kind-module\"><a href=\"meyda_wa.MeydaAnalyzer.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Analyzer</a><ul><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#get\" class=\"tsd-kind-icon\">get</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#setChannel\" class=\"tsd-kind-icon\">set<wbr/>Channel</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#setSource\" class=\"tsd-kind-icon\">set<wbr/>Source</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#start\" class=\"tsd-kind-icon\">start</a></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><a href=\"meyda_wa.MeydaAnalyzer.html#stop\" class=\"tsd-kind-icon\">stop</a></li></ul></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li><li class=\"tsd-kind-method tsd-parent-kind-class\"><span class=\"tsd-kind-icon\">Method</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/index.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"assets/style.css\"/><link rel=\"stylesheet\" href=\"assets/highlight.css\"/><script async src=\"assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\".\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><h1> meyda</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Modules</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-module\"><a href=\"modules/Meyda.html\" class=\"tsd-kind-icon\">Meyda</a></li><li class=\"tsd-kind-module\"><a href=\"modules/meyda_wa.html\" class=\"tsd-kind-icon\">meyda-<wbr/>wa</a></li></ul></section></div></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"current\"><a href=\"index.html\">Modules</a></li><li class=\" tsd-kind-module\"><a href=\"modules/Meyda.html\">Meyda</a></li><li class=\" tsd-kind-module\"><a href=\"modules/meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/interfaces/Meyda.MeydaFeaturesObject.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>MeydaFeaturesObject | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"../modules/Meyda.html\">Meyda</a></li><li><a href=\"Meyda.MeydaFeaturesObject.html\">MeydaFeaturesObject</a></li></ul><h1>Interface MeydaFeaturesObject</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel tsd-hierarchy\"><h3>Hierarchy</h3><ul class=\"tsd-hierarchy\"><li><span class=\"target\">MeydaFeaturesObject</span></li></ul></section><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Properties</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#amplitudeSpectrum\" class=\"tsd-kind-icon\">amplitude<wbr/>Spectrum</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#buffer\" class=\"tsd-kind-icon\">buffer</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#chroma\" class=\"tsd-kind-icon\">chroma</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#complexSpectrum\" class=\"tsd-kind-icon\">complex<wbr/>Spectrum</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#energy\" class=\"tsd-kind-icon\">energy</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#loudness\" class=\"tsd-kind-icon\">loudness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#mfcc\" class=\"tsd-kind-icon\">mfcc</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#perceptualSharpness\" class=\"tsd-kind-icon\">perceptual<wbr/>Sharpness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#perceptualSpread\" class=\"tsd-kind-icon\">perceptual<wbr/>Spread</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#powerSpectrum\" class=\"tsd-kind-icon\">power<wbr/>Spectrum</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#rms\" class=\"tsd-kind-icon\">rms</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralCentroid\" class=\"tsd-kind-icon\">spectral<wbr/>Centroid</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralFlatness\" class=\"tsd-kind-icon\">spectral<wbr/>Flatness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralKurtosis\" class=\"tsd-kind-icon\">spectral<wbr/>Kurtosis</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralRolloff\" class=\"tsd-kind-icon\">spectral<wbr/>Rolloff</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralSkewness\" class=\"tsd-kind-icon\">spectral<wbr/>Skewness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralSlope\" class=\"tsd-kind-icon\">spectral<wbr/>Slope</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralSpread\" class=\"tsd-kind-icon\">spectral<wbr/>Spread</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#zcr\" class=\"tsd-kind-icon\">zcr</a></li></ul></section></div></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Properties</h2><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"amplitudeSpectrum\" class=\"tsd-anchor\"></a><h3>amplitude<wbr/>Spectrum</h3><div class=\"tsd-signature tsd-kind-icon\">amplitude<wbr/>Spectrum<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">Float32Array</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L13\">src/main.ts:13</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"buffer\" class=\"tsd-anchor\"></a><h3>buffer</h3><div class=\"tsd-signature tsd-kind-icon\">buffer<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L14\">src/main.ts:14</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"chroma\" class=\"tsd-anchor\"></a><h3>chroma</h3><div class=\"tsd-signature tsd-kind-icon\">chroma<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L15\">src/main.ts:15</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"complexSpectrum\" class=\"tsd-anchor\"></a><h3>complex<wbr/>Spectrum</h3><div class=\"tsd-signature tsd-kind-icon\">complex<wbr/>Spectrum<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-symbol\">{ </span>imag<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span><span class=\"tsd-signature-symbol\">; </span>real<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span><span class=\"tsd-signature-symbol\"> }</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L16\">src/main.ts:16</a></li></ul></aside><div class=\"tsd-type-declaration\"><h4>Type declaration</h4><ul class=\"tsd-parameters\"><li class=\"tsd-parameter\"><h5>imag<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span></h5></li><li class=\"tsd-parameter\"><h5>real<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span></h5></li></ul></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"energy\" class=\"tsd-anchor\"></a><h3>energy</h3><div class=\"tsd-signature tsd-kind-icon\">energy<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L20\">src/main.ts:20</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"loudness\" class=\"tsd-anchor\"></a><h3>loudness</h3><div class=\"tsd-signature tsd-kind-icon\">loudness<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-symbol\">{ </span>specific<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">Float32Array</span><span class=\"tsd-signature-symbol\">; </span>total<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\"> }</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L21\">src/main.ts:21</a></li></ul></aside><div class=\"tsd-type-declaration\"><h4>Type declaration</h4><ul class=\"tsd-parameters\"><li class=\"tsd-parameter\"><h5>specific<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">Float32Array</span></h5></li><li class=\"tsd-parameter\"><h5>total<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span></h5></li></ul></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"mfcc\" class=\"tsd-anchor\"></a><h3>mfcc</h3><div class=\"tsd-signature tsd-kind-icon\">mfcc<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">[]</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L25\">src/main.ts:25</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"perceptualSharpness\" class=\"tsd-anchor\"></a><h3>perceptual<wbr/>Sharpness</h3><div class=\"tsd-signature tsd-kind-icon\">perceptual<wbr/>Sharpness<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L26\">src/main.ts:26</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"perceptualSpread\" class=\"tsd-anchor\"></a><h3>perceptual<wbr/>Spread</h3><div class=\"tsd-signature tsd-kind-icon\">perceptual<wbr/>Spread<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L27\">src/main.ts:27</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"powerSpectrum\" class=\"tsd-anchor\"></a><h3>power<wbr/>Spectrum</h3><div class=\"tsd-signature tsd-kind-icon\">power<wbr/>Spectrum<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">Float32Array</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L28\">src/main.ts:28</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"rms\" class=\"tsd-anchor\"></a><h3>rms</h3><div class=\"tsd-signature tsd-kind-icon\">rms<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L29\">src/main.ts:29</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralCentroid\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Centroid</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Centroid<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L30\">src/main.ts:30</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralFlatness\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Flatness</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Flatness<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L31\">src/main.ts:31</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralKurtosis\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Kurtosis</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Kurtosis<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L32\">src/main.ts:32</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralRolloff\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Rolloff</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Rolloff<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L33\">src/main.ts:33</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralSkewness\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Skewness</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Skewness<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L34\">src/main.ts:34</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralSlope\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Slope</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Slope<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L35\">src/main.ts:35</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"spectralSpread\" class=\"tsd-anchor\"></a><h3>spectral<wbr/>Spread</h3><div class=\"tsd-signature tsd-kind-icon\">spectral<wbr/>Spread<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L36\">src/main.ts:36</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"zcr\" class=\"tsd-anchor\"></a><h3>zcr</h3><div class=\"tsd-signature tsd-kind-icon\">zcr<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L37\">src/main.ts:37</a></li></ul></aside></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\"current tsd-kind-module\"><a href=\"../modules/Meyda.html\">Meyda</a></li><li class=\" tsd-kind-module\"><a href=\"../modules/meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"current tsd-kind-interface tsd-parent-kind-module\"><a href=\"Meyda.MeydaFeaturesObject.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Features<wbr/>Object</a><ul><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#amplitudeSpectrum\" class=\"tsd-kind-icon\">amplitude<wbr/>Spectrum</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#buffer\" class=\"tsd-kind-icon\">buffer</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#chroma\" class=\"tsd-kind-icon\">chroma</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#complexSpectrum\" class=\"tsd-kind-icon\">complex<wbr/>Spectrum</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#energy\" class=\"tsd-kind-icon\">energy</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#loudness\" class=\"tsd-kind-icon\">loudness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#mfcc\" class=\"tsd-kind-icon\">mfcc</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#perceptualSharpness\" class=\"tsd-kind-icon\">perceptual<wbr/>Sharpness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#perceptualSpread\" class=\"tsd-kind-icon\">perceptual<wbr/>Spread</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#powerSpectrum\" class=\"tsd-kind-icon\">power<wbr/>Spectrum</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#rms\" class=\"tsd-kind-icon\">rms</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralCentroid\" class=\"tsd-kind-icon\">spectral<wbr/>Centroid</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralFlatness\" class=\"tsd-kind-icon\">spectral<wbr/>Flatness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralKurtosis\" class=\"tsd-kind-icon\">spectral<wbr/>Kurtosis</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralRolloff\" class=\"tsd-kind-icon\">spectral<wbr/>Rolloff</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralSkewness\" class=\"tsd-kind-icon\">spectral<wbr/>Skewness</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralSlope\" class=\"tsd-kind-icon\">spectral<wbr/>Slope</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#spectralSpread\" class=\"tsd-kind-icon\">spectral<wbr/>Spread</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.MeydaFeaturesObject.html#zcr\" class=\"tsd-kind-icon\">zcr</a></li></ul></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><span class=\"tsd-kind-icon\">Property</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/interfaces/Meyda.SliceableArrayLike.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>SliceableArrayLike | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"../modules/Meyda.html\">Meyda</a></li><li><a href=\"Meyda.SliceableArrayLike.html\">SliceableArrayLike</a></li></ul><h1>Interface SliceableArrayLike&lt;T&gt;</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel tsd-type-parameters\"><h3>Type parameters</h3><ul class=\"tsd-type-parameters\"><li><h4>T</h4></li></ul></section><section class=\"tsd-panel tsd-hierarchy\"><h3>Hierarchy</h3><ul class=\"tsd-hierarchy\"><li><span class=\"tsd-signature-type\">ArrayLike</span><span class=\"tsd-signature-symbol\">&lt;</span><span class=\"tsd-signature-type\" data-tsd-kind=\"Type parameter\">T</span><span class=\"tsd-signature-symbol\">&gt;</span><ul class=\"tsd-hierarchy\"><li><span class=\"target\">SliceableArrayLike</span></li></ul></li></ul></section><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section tsd-is-inherited tsd-is-external\"><h3>Properties</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited tsd-is-external\"><a href=\"Meyda.SliceableArrayLike.html#length\" class=\"tsd-kind-icon\">length</a></li></ul></section><section class=\"tsd-index-section \"><h3>Methods</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.SliceableArrayLike.html#slice\" class=\"tsd-kind-icon\">slice</a></li></ul></section></div></section></section><section class=\"tsd-panel-group tsd-member-group tsd-is-inherited tsd-is-external\"><h2>Properties</h2><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited tsd-is-external\"><a id=\"length\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagReadonly\">Readonly</span> length</h3><div class=\"tsd-signature tsd-kind-icon\">length<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><p>Inherited from ArrayLike.length</p><ul><li>Defined in node_modules/typescript/lib/lib.es5.d.ts:1464</li></ul></aside></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Methods</h2><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface\"><a id=\"slice\" class=\"tsd-anchor\"></a><h3>slice</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-interface\"><li class=\"tsd-signature tsd-kind-icon\">slice<span class=\"tsd-signature-symbol\">(</span>start<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span>, end<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><a href=\"Meyda.SliceableArrayLike.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">SliceableArrayLike</a><span class=\"tsd-signature-symbol\">&lt;</span><span class=\"tsd-signature-type\" data-tsd-kind=\"Type parameter\">T</span><span class=\"tsd-signature-symbol\">&gt;</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L76\">src/main.ts:76</a></li></ul></aside><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>start: <span class=\"tsd-signature-type\">number</span></h5></li><li><h5>end: <span class=\"tsd-signature-type\">number</span></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <a href=\"Meyda.SliceableArrayLike.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">SliceableArrayLike</a><span class=\"tsd-signature-symbol\">&lt;</span><span class=\"tsd-signature-type\" data-tsd-kind=\"Type parameter\">T</span><span class=\"tsd-signature-symbol\">&gt;</span></h4></li></ul></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\"current tsd-kind-module\"><a href=\"../modules/Meyda.html\">Meyda</a></li><li class=\" tsd-kind-module\"><a href=\"../modules/meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"current tsd-kind-interface tsd-parent-kind-module tsd-has-type-parameter\"><a href=\"Meyda.SliceableArrayLike.html\" class=\"tsd-kind-icon\">Sliceable<wbr/>Array<wbr/>Like</a><ul><li class=\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited tsd-is-external\"><a href=\"Meyda.SliceableArrayLike.html#length\" class=\"tsd-kind-icon\">length</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.SliceableArrayLike.html#slice\" class=\"tsd-kind-icon\">slice</a></li></ul></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><span class=\"tsd-kind-icon\">Method</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/interfaces/Meyda.default.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>default | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"../modules/Meyda.html\">Meyda</a></li><li><a href=\"Meyda.default.html\">default</a></li></ul><h1>Interface default</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel tsd-comment\"><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Meyda is a library for extracting audio features from an audio signal.</p>\n</div><div><p>The primary entry points are <a href=\"Meyda.default.html#extract\">extract</a> for audio feature extraction on\nraw signals you have in memory, and <a href=\"Meyda.default.html#createMeydaAnalyzer\">createMeydaAnalyzer</a>, which\nprovides a <a href=\"../classes/meyda_wa.MeydaAnalyzer.html\">MeydaAnalyzer</a> object that can be used to extract features\non a Web Audio API AudioNode. The latter is only supported on web targets,\nthough if you&#39;re using the Web Audio API in a non-web target, we&#39;d love to\nhear from you.</p>\n<p>We also expose <a href=\"Meyda.default.html#listAvailableFeatureExtractors\">listAvailableFeatureExtractors</a> which returns a list of the\navailable feature extractors, and <a href=\"Meyda.default.html#windowing\">windowing</a>, which lets you apply\na windowing function to your signal outside of Meyda.</p>\n<p>We existed long before esmodules, so our backwards compatible API may seem\nunusual. We export a default object, with read/write fields that control\nvarious parameters of the audio feature extraction process. We&#39;re working on\na new interface, check out <a href=\"https://github.com/meyda/meyda/issues/257\">#257</a>\nfor more information.</p>\n</div></div></section><section class=\"tsd-panel tsd-hierarchy\"><h3>Hierarchy</h3><ul class=\"tsd-hierarchy\"><li><span class=\"target\">default</span></li></ul></section><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Properties</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#audioContext\" class=\"tsd-kind-icon\">audio<wbr/>Context</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#bufferSize\" class=\"tsd-kind-icon\">buffer<wbr/>Size</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#chromaBands\" class=\"tsd-kind-icon\">chroma<wbr/>Bands</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#featureExtractors\" class=\"tsd-kind-icon\">feature<wbr/>Extractors</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#melBands\" class=\"tsd-kind-icon\">mel<wbr/>Bands</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#numberOfMFCCCoefficients\" class=\"tsd-kind-icon\">number<wbr/>OfMFCCCoefficients</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#sampleRate\" class=\"tsd-kind-icon\">sample<wbr/>Rate</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#windowingFunction\" class=\"tsd-kind-icon\">windowing<wbr/>Function</a></li></ul></section><section class=\"tsd-index-section \"><h3>Methods</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#createMeydaAnalyzer\" class=\"tsd-kind-icon\">create<wbr/>Meyda<wbr/>Analyzer</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#extract\" class=\"tsd-kind-icon\">extract</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#listAvailableFeatureExtractors\" class=\"tsd-kind-icon\">list<wbr/>Available<wbr/>Feature<wbr/>Extractors</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#windowing\" class=\"tsd-kind-icon\">windowing</a></li></ul></section></div></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Properties</h2><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"audioContext\" class=\"tsd-anchor\"></a><h3>audio<wbr/>Context</h3><div class=\"tsd-signature tsd-kind-icon\">audio<wbr/>Context<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">null</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">AudioContext</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L104\">src/main.ts:104</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Meyda stores a reference to the relevant audio context here for use inside\nthe Web Audio API.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"bufferSize\" class=\"tsd-anchor\"></a><h3>buffer<wbr/>Size</h3><div class=\"tsd-signature tsd-kind-icon\">buffer<wbr/>Size<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L122\">src/main.ts:122</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The length of each buffer that Meyda will extract audio on. When recieving\ninput via the Web Audio API, the Script Processor Node chunks incoming audio\ninto arrays of this length. Longer buffers allow for more precision in the\nfrequency domain, but increase the amount of time it takes for Meyda to\noutput a set of audio features for the buffer. You can calculate how many\nsets of audio features Meyda will output per second by dividing the\nbuffer size by the sample rate. If you&#39;re using Meyda for visualisation,\nmake sure that you&#39;re collecting audio features at a rate that&#39;s faster\nthan or equal to the video frame rate you expect.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"chromaBands\" class=\"tsd-anchor\"></a><h3>chroma<wbr/>Bands</h3><div class=\"tsd-signature tsd-kind-icon\">chroma<wbr/>Bands<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L140\">src/main.ts:140</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of bands to divide the spectrum into for the Chroma feature\nextractor. 12 is the standard number of semitones per octave in the western\nmusic tradition, but Meyda can use an arbitrary number of bands, which\ncan be useful for microtonal music.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"featureExtractors\" class=\"tsd-anchor\"></a><h3>feature<wbr/>Extractors</h3><div class=\"tsd-signature tsd-kind-icon\">feature<wbr/>Extractors<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">any</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L154\">src/main.ts:154</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"melBands\" class=\"tsd-anchor\"></a><h3>mel<wbr/>Bands</h3><div class=\"tsd-signature tsd-kind-icon\">mel<wbr/>Bands<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L133\">src/main.ts:133</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of Mel bands to use in the Mel Frequency Cepstral Co-efficients\nfeature extractor</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"numberOfMFCCCoefficients\" class=\"tsd-anchor\"></a><h3>number<wbr/>OfMFCCCoefficients</h3><div class=\"tsd-signature tsd-kind-icon\">number<wbr/>OfMFCCCoefficients<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L160\">src/main.ts:160</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of MFCC co-efficients that the MFCC feature extractor should return</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"sampleRate\" class=\"tsd-anchor\"></a><h3>sample<wbr/>Rate</h3><div class=\"tsd-signature tsd-kind-icon\">sample<wbr/>Rate<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L128\">src/main.ts:128</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of samples per second of the incoming audio. This affects\nfeature extraction outside of the context of the Web Audio API, and must be\nset accurately - otherwise calculations will be off.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"windowingFunction\" class=\"tsd-anchor\"></a><h3>windowing<wbr/>Function</h3><div class=\"tsd-signature tsd-kind-icon\">windowing<wbr/>Function<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">string</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L153\">src/main.ts:153</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Specify the windowing function to apply to the buffer before the\ntransformation from the time domain to the frequency domain is performed</p>\n</div><div><p>The default windowing function is the hanning window.</p>\n</div></div></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Methods</h2><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface\"><a id=\"createMeydaAnalyzer\" class=\"tsd-anchor\"></a><h3>create<wbr/>Meyda<wbr/>Analyzer</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-interface\"><li class=\"tsd-signature tsd-kind-icon\">create<wbr/>Meyda<wbr/>Analyzer<span class=\"tsd-signature-symbol\">(</span>MeydaAnalyzerOptions<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">any</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><a href=\"../classes/meyda_wa.MeydaAnalyzer.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Class\">MeydaAnalyzer</a></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L193\">src/main.ts:193</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><dl class=\"tsd-comment-tags\"><dt>summary</dt><dd><p>Create a MeydaAnalyzer</p>\n<p>A factory function for creating a MeydaAnalyzer, the interface for using\nMeyda in the context of Web Audio.</p>\n</dd><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-0\">const</span><span class=\"hl-1\"> </span><span class=\"hl-2\">analyzer</span><span class=\"hl-1\"> = </span><span class=\"hl-3\">Meyda</span><span class=\"hl-1\">.</span><span class=\"hl-4\">createMeydaAnalyzer</span><span class=\"hl-1\">({</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;audioContext&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-3\">audioContext</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;source&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-3\">source</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;bufferSize&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-6\">512</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;featureExtractors&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> [</span><span class=\"hl-5\">&quot;rms&quot;</span><span class=\"hl-1\">],</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;inputs&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-6\">2</span><span class=\"hl-1\">,</span><br/><span class=\"hl-1\">  </span><span class=\"hl-5\">&quot;callback&quot;</span><span class=\"hl-3\">:</span><span class=\"hl-1\"> </span><span class=\"hl-3\">features</span><span class=\"hl-1\"> </span><span class=\"hl-0\">=&gt;</span><span class=\"hl-1\"> {</span><br/><span class=\"hl-1\">    </span><span class=\"hl-3\">levelRangeElement</span><span class=\"hl-1\">.</span><span class=\"hl-3\">value</span><span class=\"hl-1\"> = </span><span class=\"hl-3\">features</span><span class=\"hl-1\">.</span><span class=\"hl-3\">rms</span><span class=\"hl-1\">;</span><br/><span class=\"hl-1\">  }</span><br/><span class=\"hl-1\">});</span>\n</code></pre>\n</dd></dl></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>MeydaAnalyzerOptions: <span class=\"tsd-signature-type\">any</span></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <a href=\"../classes/meyda_wa.MeydaAnalyzer.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Class\">MeydaAnalyzer</a></h4></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface\"><a id=\"extract\" class=\"tsd-anchor\"></a><h3>extract</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-interface\"><li class=\"tsd-signature tsd-kind-icon\">extract<span class=\"tsd-signature-symbol\">(</span>feature<span class=\"tsd-signature-symbol\">: </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span>, signal<span class=\"tsd-signature-symbol\">: </span><a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a>, previousSignal<span class=\"tsd-signature-symbol\">?: </span><a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">null</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L223\">src/main.ts:223</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Extract an audio feature from a buffer</p>\n</div><div><p>Unless <code>meyda.windowingFunction</code> is set otherwise, <code>extract</code> will\ninternally apply a hanning window to the buffer prior to conversion into\nthe frequency domain.</p>\n</div><dl class=\"tsd-comment-tags\"><dt>example</dt><dd><pre><code class=\"language-javascript\"><span class=\"hl-3\">meyda</span><span class=\"hl-1\">.</span><span class=\"hl-3\">bufferSize</span><span class=\"hl-1\"> = </span><span class=\"hl-6\">2048</span><span class=\"hl-1\">;</span><br/><span class=\"hl-0\">const</span><span class=\"hl-1\"> </span><span class=\"hl-2\">features</span><span class=\"hl-1\"> = </span><span class=\"hl-3\">meyda</span><span class=\"hl-1\">.</span><span class=\"hl-4\">extract</span><span class=\"hl-1\">([</span><span class=\"hl-5\">&#39;zcr&#39;</span><span class=\"hl-1\">, </span><span class=\"hl-5\">&#39;spectralCentroid&#39;</span><span class=\"hl-1\">], </span><span class=\"hl-3\">signal</span><span class=\"hl-1\">);</span>\n</code></pre>\n<p>Aside: yes, you need to modify the value of a field of the default export\nof the package to change the buffer size. We realise this now seems not\na good practice. See <a href=\"https://github.com/meyda/meyda/issues/257\">this issue</a>\nto track our progress on implementing a more modern API.</p>\n</dd></dl></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>feature: <a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span></h5><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>the feature you want to extract</p>\n</div></div></li><li><h5>signal: <a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a></h5><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>An array of numbers that represents the signal. It should be of length\n<code>meyda.bufferSize</code></p>\n</div></div></li><li><h5><span class=\"tsd-flag ts-flagOptional\">Optional</span> previousSignal: <a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">null</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span></h4><div><p>Features</p>\n</div></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface\"><a id=\"listAvailableFeatureExtractors\" class=\"tsd-anchor\"></a><h3>list<wbr/>Available<wbr/>Feature<wbr/>Extractors</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-interface\"><li class=\"tsd-signature tsd-kind-icon\">list<wbr/>Available<wbr/>Feature<wbr/>Extractors<span class=\"tsd-signature-symbol\">(</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L198\">src/main.ts:198</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>List available audio feature extractors. Return format provides the key to\nbe used in selecting the extractor in the extract methods</p>\n</div></div><h4 class=\"tsd-returns-title\">Returns <a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span></h4></li></ul></section><section class=\"tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface\"><a id=\"windowing\" class=\"tsd-anchor\"></a><h3>windowing</h3><ul class=\"tsd-signatures tsd-kind-method tsd-parent-kind-interface\"><li class=\"tsd-signature tsd-kind-icon\">windowing<span class=\"tsd-signature-symbol\">(</span>signal<span class=\"tsd-signature-symbol\">: </span><a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a>, windowname<span class=\"tsd-signature-symbol\">?: </span><a href=\"../modules/Meyda.html#MeydaWindowingFunction\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaWindowingFunction</a><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L166\">src/main.ts:166</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Apply a windowing function to a signal</p>\n</div></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>signal: <a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a></h5></li><li><h5><span class=\"tsd-flag ts-flagOptional\">Optional</span> windowname: <a href=\"../modules/Meyda.html#MeydaWindowingFunction\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaWindowingFunction</a></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <a href=\"../modules/Meyda.html#MeydaSignal\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaSignal</a></h4></li></ul></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\"current tsd-kind-module\"><a href=\"../modules/Meyda.html\">Meyda</a></li><li class=\" tsd-kind-module\"><a href=\"../modules/meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"current tsd-kind-interface tsd-parent-kind-module\"><a href=\"Meyda.default.html\" class=\"tsd-kind-icon\">default</a><ul><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#audioContext\" class=\"tsd-kind-icon\">audio<wbr/>Context</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#bufferSize\" class=\"tsd-kind-icon\">buffer<wbr/>Size</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#chromaBands\" class=\"tsd-kind-icon\">chroma<wbr/>Bands</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#featureExtractors\" class=\"tsd-kind-icon\">feature<wbr/>Extractors</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#melBands\" class=\"tsd-kind-icon\">mel<wbr/>Bands</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#numberOfMFCCCoefficients\" class=\"tsd-kind-icon\">number<wbr/>OfMFCCCoefficients</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#sampleRate\" class=\"tsd-kind-icon\">sample<wbr/>Rate</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"Meyda.default.html#windowingFunction\" class=\"tsd-kind-icon\">windowing<wbr/>Function</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#createMeydaAnalyzer\" class=\"tsd-kind-icon\">create<wbr/>Meyda<wbr/>Analyzer</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#extract\" class=\"tsd-kind-icon\">extract</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#listAvailableFeatureExtractors\" class=\"tsd-kind-icon\">list<wbr/>Available<wbr/>Feature<wbr/>Extractors</a></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><a href=\"Meyda.default.html#windowing\" class=\"tsd-kind-icon\">windowing</a></li></ul></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><span class=\"tsd-kind-icon\">Property</span></li><li class=\"tsd-kind-method tsd-parent-kind-interface\"><span class=\"tsd-kind-icon\">Method</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/interfaces/meyda_wa.MeydaAnalyzerOptions.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>MeydaAnalyzerOptions | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"../modules/meyda_wa.html\">meyda-wa</a></li><li><a href=\"meyda_wa.MeydaAnalyzerOptions.html\">MeydaAnalyzerOptions</a></li></ul><h1>Interface MeydaAnalyzerOptions</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel tsd-comment\"><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>MeydaAnalyzerOptions</p>\n</div></div></section><section class=\"tsd-panel tsd-hierarchy\"><h3>Hierarchy</h3><ul class=\"tsd-hierarchy\"><li><span class=\"target\">MeydaAnalyzerOptions</span></li></ul></section><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Properties</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#audioContext\" class=\"tsd-kind-icon\">audio<wbr/>Context</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#bufferSize\" class=\"tsd-kind-icon\">buffer<wbr/>Size</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#callback\" class=\"tsd-kind-icon\">callback</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#channel\" class=\"tsd-kind-icon\">channel</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#featureExtractors\" class=\"tsd-kind-icon\">feature<wbr/>Extractors</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#hopSize\" class=\"tsd-kind-icon\">hop<wbr/>Size</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#inputs\" class=\"tsd-kind-icon\">inputs</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#numberOfMFCCCoefficients\" class=\"tsd-kind-icon\">number<wbr/>OfMFCCCoefficients</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#outputs\" class=\"tsd-kind-icon\">outputs</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#sampleRate\" class=\"tsd-kind-icon\">sample<wbr/>Rate</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#source\" class=\"tsd-kind-icon\">source</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#startImmediately\" class=\"tsd-kind-icon\">start<wbr/>Immediately</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#windowingFunction\" class=\"tsd-kind-icon\">windowing<wbr/>Function</a></li></ul></section></div></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Properties</h2><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"audioContext\" class=\"tsd-anchor\"></a><h3>audio<wbr/>Context</h3><div class=\"tsd-signature tsd-kind-icon\">audio<wbr/>Context<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">AudioContext</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L16\">src/meyda-wa.ts:16</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The Audio Context for the MeydaAnalyzer to operate in.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"bufferSize\" class=\"tsd-anchor\"></a><h3>buffer<wbr/>Size</h3><div class=\"tsd-signature tsd-kind-icon\">buffer<wbr/>Size<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L24\">src/meyda-wa.ts:24</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The size of the buffer.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"callback\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> callback</h3><div class=\"tsd-signature tsd-kind-icon\">callback<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-symbol\">(</span>features<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\"> =&gt; </span><span class=\"tsd-signature-type\">void</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L61\">src/meyda-wa.ts:61</a></li></ul></aside><div class=\"tsd-type-declaration\"><h4>Type declaration</h4><ul class=\"tsd-parameters\"><li class=\"tsd-parameter-signature\"><ul class=\"tsd-signatures tsd-kind-type-literal tsd-parent-kind-interface\"><li class=\"tsd-signature tsd-kind-icon\"><span class=\"tsd-signature-symbol\">(</span>features<span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span><span class=\"tsd-signature-symbol\">)</span><span class=\"tsd-signature-symbol\">: </span><span class=\"tsd-signature-type\">void</span></li></ul><ul class=\"tsd-descriptions\"><li class=\"tsd-description\"><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The callback to receive your audio features. Will be called once for each buffer of input audio.</p>\n</div></div><h4 class=\"tsd-parameters-title\">Parameters</h4><ul class=\"tsd-parameters\"><li><h5>features: <span class=\"tsd-signature-type\">Partial</span><span class=\"tsd-signature-symbol\">&lt;</span><a href=\"Meyda.MeydaFeaturesObject.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">MeydaFeaturesObject</a><span class=\"tsd-signature-symbol\">&gt;</span></h5></li></ul><h4 class=\"tsd-returns-title\">Returns <span class=\"tsd-signature-type\">void</span></h4></li></ul></li></ul></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"channel\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> channel</h3><div class=\"tsd-signature tsd-kind-icon\">channel<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L40\">src/meyda-wa.ts:40</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The channel from the input node to listen to</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"featureExtractors\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> feature<wbr/>Extractors</h3><div class=\"tsd-signature tsd-kind-icon\">feature<wbr/>Extractors<span class=\"tsd-signature-symbol\">?:</span> <a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-symbol\">readonly </span><a href=\"../modules/Meyda.html#MeydaAudioFeature\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaAudioFeature</a><span class=\"tsd-signature-symbol\">[]</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L48\">src/meyda-wa.ts:48</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>What feature extractors to return to the callback.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"hopSize\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> hop<wbr/>Size</h3><div class=\"tsd-signature tsd-kind-icon\">hop<wbr/>Size<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L28\">src/meyda-wa.ts:28</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of samples between the start of each buffer.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"inputs\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> inputs</h3><div class=\"tsd-signature tsd-kind-icon\">inputs<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L52\">src/meyda-wa.ts:52</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"numberOfMFCCCoefficients\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> number<wbr/>OfMFCCCoefficients</h3><div class=\"tsd-signature tsd-kind-icon\">number<wbr/>OfMFCCCoefficients<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L57\">src/meyda-wa.ts:57</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of mfcc coefficients to calculate for each buffer.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"outputs\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> outputs</h3><div class=\"tsd-signature tsd-kind-icon\">outputs<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L53\">src/meyda-wa.ts:53</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"sampleRate\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> sample<wbr/>Rate</h3><div class=\"tsd-signature tsd-kind-icon\">sample<wbr/>Rate<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">number</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L32\">src/meyda-wa.ts:32</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The number of samples per second in the audioContext.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"source\" class=\"tsd-anchor\"></a><h3>source</h3><div class=\"tsd-signature tsd-kind-icon\">source<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">AudioNode</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L20\">src/meyda-wa.ts:20</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The Audio Node for Meyda to listen to.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"startImmediately\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> start<wbr/>Immediately</h3><div class=\"tsd-signature tsd-kind-icon\">start<wbr/>Immediately<span class=\"tsd-signature-symbol\">?:</span> <span class=\"tsd-signature-type\">boolean</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L36\">src/meyda-wa.ts:36</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>Pass <code>true</code> to start feature extraction immediately</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface\"><a id=\"windowingFunction\" class=\"tsd-anchor\"></a><h3><span class=\"tsd-flag ts-flagOptional\">Optional</span> windowing<wbr/>Function</h3><div class=\"tsd-signature tsd-kind-icon\">windowing<wbr/>Function<span class=\"tsd-signature-symbol\">?:</span> <a href=\"../modules/Meyda.html#MeydaWindowingFunction\" class=\"tsd-signature-type\" data-tsd-kind=\"Type alias\">MeydaWindowingFunction</a></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/meyda-wa.ts#L44\">src/meyda-wa.ts:44</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>The Windowing Function to apply to the signal before transformation to the frequency domain.</p>\n</div></div></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\" tsd-kind-module\"><a href=\"../modules/Meyda.html\">Meyda</a></li><li class=\"current tsd-kind-module\"><a href=\"../modules/meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"current tsd-kind-interface tsd-parent-kind-module\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Analyzer<wbr/>Options</a><ul><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#audioContext\" class=\"tsd-kind-icon\">audio<wbr/>Context</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#bufferSize\" class=\"tsd-kind-icon\">buffer<wbr/>Size</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#callback\" class=\"tsd-kind-icon\">callback</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#channel\" class=\"tsd-kind-icon\">channel</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#featureExtractors\" class=\"tsd-kind-icon\">feature<wbr/>Extractors</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#hopSize\" class=\"tsd-kind-icon\">hop<wbr/>Size</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#inputs\" class=\"tsd-kind-icon\">inputs</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#numberOfMFCCCoefficients\" class=\"tsd-kind-icon\">number<wbr/>OfMFCCCoefficients</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#outputs\" class=\"tsd-kind-icon\">outputs</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#sampleRate\" class=\"tsd-kind-icon\">sample<wbr/>Rate</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#source\" class=\"tsd-kind-icon\">source</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#startImmediately\" class=\"tsd-kind-icon\">start<wbr/>Immediately</a></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><a href=\"meyda_wa.MeydaAnalyzerOptions.html#windowingFunction\" class=\"tsd-kind-icon\">windowing<wbr/>Function</a></li></ul></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li><li class=\"tsd-kind-property tsd-parent-kind-interface\"><span class=\"tsd-kind-icon\">Property</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/modules/Meyda.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>Meyda | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"Meyda.html\">Meyda</a></li></ul><h1>Module Meyda</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel tsd-comment\"><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>This file contains the default export for Meyda, you probably want to check\nout <a href=\"../interfaces/Meyda.default.html\">default</a></p>\n</div></div></section><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Interfaces</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-interface tsd-parent-kind-module\"><a href=\"../interfaces/Meyda.MeydaFeaturesObject.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Features<wbr/>Object</a></li><li class=\"tsd-kind-interface tsd-parent-kind-module tsd-has-type-parameter\"><a href=\"../interfaces/Meyda.SliceableArrayLike.html\" class=\"tsd-kind-icon\">Sliceable<wbr/>Array<wbr/>Like</a></li><li class=\"tsd-kind-interface tsd-parent-kind-module\"><a href=\"../interfaces/Meyda.default.html\" class=\"tsd-kind-icon\">default</a></li></ul></section><section class=\"tsd-index-section \"><h3>Type aliases</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-type-alias tsd-parent-kind-module\"><a href=\"Meyda.html#MeydaAudioFeature\" class=\"tsd-kind-icon\">Meyda<wbr/>Audio<wbr/>Feature</a></li><li class=\"tsd-kind-type-alias tsd-parent-kind-module\"><a href=\"Meyda.html#MeydaSignal\" class=\"tsd-kind-icon\">Meyda<wbr/>Signal</a></li><li class=\"tsd-kind-type-alias tsd-parent-kind-module\"><a href=\"Meyda.html#MeydaWindowingFunction\" class=\"tsd-kind-icon\">Meyda<wbr/>Windowing<wbr/>Function</a></li></ul></section><section class=\"tsd-index-section \"><h3>Variables</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-variable tsd-parent-kind-module\"><a href=\"Meyda.html#default-1\" class=\"tsd-kind-icon\">default</a></li></ul></section></div></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Type aliases</h2><section class=\"tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module\"><a id=\"MeydaAudioFeature\" class=\"tsd-anchor\"></a><h3>Meyda<wbr/>Audio<wbr/>Feature</h3><div class=\"tsd-signature tsd-kind-icon\">Meyda<wbr/>Audio<wbr/>Feature<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">&quot;amplitudeSpectrum&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;chroma&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;complexSpectrum&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;energy&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;loudness&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;mfcc&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;perceptualSharpness&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;perceptualSpread&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;powerSpectrum&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;rms&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralCentroid&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralFlatness&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralFlux&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralKurtosis&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralRolloff&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralSkewness&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralSlope&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;spectralSpread&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;zcr&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;buffer&quot;</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L46\">src/main.ts:46</a></li></ul></aside></section><section class=\"tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module\"><a id=\"MeydaSignal\" class=\"tsd-anchor\"></a><h3>Meyda<wbr/>Signal</h3><div class=\"tsd-signature tsd-kind-icon\">Meyda<wbr/>Signal<span class=\"tsd-signature-symbol\">:</span> <a href=\"../interfaces/Meyda.SliceableArrayLike.html\" class=\"tsd-signature-type\" data-tsd-kind=\"Interface\">SliceableArrayLike</a><span class=\"tsd-signature-symbol\">&lt;</span><span class=\"tsd-signature-type\">number</span><span class=\"tsd-signature-symbol\">&gt;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">Float32Array</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L73\">src/main.ts:73</a></li></ul></aside><div class=\"tsd-comment tsd-typography\"><div class=\"lead\">\n<p>A type representing an audio signal. In general it should be an array of\nnumbers that is sliceable. Float32Array is assignable here, and we generally\nexpect that most signals will be in this format.</p>\n</div></div></section><section class=\"tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module\"><a id=\"MeydaWindowingFunction\" class=\"tsd-anchor\"></a><h3>Meyda<wbr/>Windowing<wbr/>Function</h3><div class=\"tsd-signature tsd-kind-icon\">Meyda<wbr/>Windowing<wbr/>Function<span class=\"tsd-signature-symbol\">:</span> <span class=\"tsd-signature-type\">&quot;blackman&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;sine&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;hanning&quot;</span><span class=\"tsd-signature-symbol\"> | </span><span class=\"tsd-signature-type\">&quot;hamming&quot;</span></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L40\">src/main.ts:40</a></li></ul></aside></section></section><section class=\"tsd-panel-group tsd-member-group \"><h2>Variables</h2><section class=\"tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module\"><a id=\"default-1\" class=\"tsd-anchor\"></a><h3>default</h3><div class=\"tsd-signature tsd-kind-icon\">default<span class=\"tsd-signature-symbol\">:</span> <a href=\"Meyda.html#default-1\" class=\"tsd-signature-type\" data-tsd-kind=\"Variable\">default</a></div><aside class=\"tsd-sources\"><ul><li>Defined in <a href=\"https://github.com/meyda/meyda/blob/6a9929e/src/main.ts#L230\">src/main.ts:230</a></li></ul></aside></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\"current tsd-kind-module\"><a href=\"Meyda.html\">Meyda</a></li><li class=\" tsd-kind-module\"><a href=\"meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"tsd-kind-interface tsd-parent-kind-module\"><a href=\"../interfaces/Meyda.MeydaFeaturesObject.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Features<wbr/>Object</a></li><li class=\"tsd-kind-interface tsd-parent-kind-module tsd-has-type-parameter\"><a href=\"../interfaces/Meyda.SliceableArrayLike.html\" class=\"tsd-kind-icon\">Sliceable<wbr/>Array<wbr/>Like</a></li><li class=\"tsd-kind-interface tsd-parent-kind-module\"><a href=\"../interfaces/Meyda.default.html\" class=\"tsd-kind-icon\">default</a></li><li class=\"tsd-kind-type-alias tsd-parent-kind-module\"><a href=\"Meyda.html#MeydaAudioFeature\" class=\"tsd-kind-icon\">Meyda<wbr/>Audio<wbr/>Feature</a></li><li class=\"tsd-kind-type-alias tsd-parent-kind-module\"><a href=\"Meyda.html#MeydaSignal\" class=\"tsd-kind-icon\">Meyda<wbr/>Signal</a></li><li class=\"tsd-kind-type-alias tsd-parent-kind-module\"><a href=\"Meyda.html#MeydaWindowingFunction\" class=\"tsd-kind-icon\">Meyda<wbr/>Windowing<wbr/>Function</a></li><li class=\"tsd-kind-variable tsd-parent-kind-module\"><a href=\"Meyda.html#default-1\" class=\"tsd-kind-icon\">default</a></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/reference/modules/meyda_wa.html",
    "content": "<!DOCTYPE html><html class=\"default no-js\"><head><meta charSet=\"utf-8\"/><meta http-equiv=\"x-ua-compatible\" content=\"IE=edge\"/><title>meyda-wa | meyda</title><meta name=\"description\" content=\"Documentation for meyda\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"../assets/style.css\"/><link rel=\"stylesheet\" href=\"../assets/highlight.css\"/><script async src=\"../assets/search.js\" id=\"search-script\"></script></head><body><script>document.body.classList.add(localStorage.getItem(\"tsd-theme\") || \"os\")</script><header><div class=\"tsd-page-toolbar\"><div class=\"container\"><div class=\"table-wrap\"><div class=\"table-cell\" id=\"tsd-search\" data-base=\"..\"><div class=\"field\"><label for=\"tsd-search-field\" class=\"tsd-widget search no-caption\">Search</label><input type=\"text\" id=\"tsd-search-field\"/></div><ul class=\"results\"><li class=\"state loading\">Preparing search index...</li><li class=\"state failure\">The search index is not available</li></ul><a href=\"../index.html\" class=\"title\">meyda</a></div><div class=\"table-cell\" id=\"tsd-widgets\"><div id=\"tsd-filter\"><a href=\"#\" class=\"tsd-widget options no-caption\" data-toggle=\"options\">Options</a><div class=\"tsd-filter-group\"><div class=\"tsd-select\" id=\"tsd-filter-visibility\"><span class=\"tsd-select-label\">All</span><ul class=\"tsd-select-list\"><li data-value=\"public\">Public</li><li data-value=\"protected\">Public/Protected</li><li data-value=\"private\" class=\"selected\">All</li></ul></div> <input type=\"checkbox\" id=\"tsd-filter-inherited\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-inherited\">Inherited</label><input type=\"checkbox\" id=\"tsd-filter-externals\" checked/><label class=\"tsd-widget\" for=\"tsd-filter-externals\">Externals</label></div></div><a href=\"#\" class=\"tsd-widget menu no-caption\" data-toggle=\"menu\">Menu</a></div></div></div></div><div class=\"tsd-page-title\"><div class=\"container\"><ul class=\"tsd-breadcrumb\"><li><a href=\"../index.html\">meyda</a></li><li><a href=\"meyda_wa.html\">meyda-wa</a></li></ul><h1>Module meyda-wa</h1></div></div></header><div class=\"container container-main\"><div class=\"row\"><div class=\"col-8 col-content\"><section class=\"tsd-panel-group tsd-index-group\"><h2>Index</h2><section class=\"tsd-panel tsd-index-panel\"><div class=\"tsd-index-content\"><section class=\"tsd-index-section \"><h3>Classes</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-class tsd-parent-kind-module\"><a href=\"../classes/meyda_wa.MeydaAnalyzer.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Analyzer</a></li></ul></section><section class=\"tsd-index-section \"><h3>Interfaces</h3><ul class=\"tsd-index-list\"><li class=\"tsd-kind-interface tsd-parent-kind-module\"><a href=\"../interfaces/meyda_wa.MeydaAnalyzerOptions.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Analyzer<wbr/>Options</a></li></ul></section></div></section></section></div><div class=\"col-4 col-menu menu-sticky-wrap menu-highlight\"><nav class=\"tsd-navigation primary\"><ul><li class=\"\"><a href=\"../index.html\">Modules</a></li><li class=\" tsd-kind-module\"><a href=\"Meyda.html\">Meyda</a></li><li class=\"current tsd-kind-module\"><a href=\"meyda_wa.html\">meyda-<wbr/>wa</a></li></ul></nav><nav class=\"tsd-navigation secondary menu-sticky\"><ul><li class=\"tsd-kind-class tsd-parent-kind-module\"><a href=\"../classes/meyda_wa.MeydaAnalyzer.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Analyzer</a></li><li class=\"tsd-kind-interface tsd-parent-kind-module\"><a href=\"../interfaces/meyda_wa.MeydaAnalyzerOptions.html\" class=\"tsd-kind-icon\">Meyda<wbr/>Analyzer<wbr/>Options</a></li></ul></nav></div></div></div><footer class=\"with-border-bottom\"><div class=\"container\"><h2>Legend</h2><div class=\"tsd-legend-group\"><ul class=\"tsd-legend\"><li class=\"tsd-kind-variable\"><span class=\"tsd-kind-icon\">Variable</span></li><li class=\"tsd-kind-type-alias\"><span class=\"tsd-kind-icon\">Type alias</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-interface\"><span class=\"tsd-kind-icon\">Interface</span></li><li class=\"tsd-kind-interface tsd-has-type-parameter\"><span class=\"tsd-kind-icon\">Interface with type parameter</span></li></ul><ul class=\"tsd-legend\"><li class=\"tsd-kind-class\"><span class=\"tsd-kind-icon\">Class</span></li></ul></div><h2>Settings</h2><p>Theme <select id=\"theme\"><option value=\"os\">OS</option><option value=\"light\">Light</option><option value=\"dark\">Dark</option></select></p></div></footer><div class=\"container tsd-generator\"><p>Generated using <a href=\"https://typedoc.org/\" target=\"_blank\">TypeDoc</a></p></div><div class=\"overlay\"></div><script src=\"../assets/main.js\"></script></body></html>"
  },
  {
    "path": "docs/rollup.config.js",
    "content": "import nodePolyfills from \"rollup-plugin-node-polyfills\";\nimport { nodeResolve } from \"@rollup/plugin-node-resolve\";\nimport { terser } from \"rollup-plugin-terser\";\nimport commonjs from \"@rollup/plugin-commonjs\";\nimport typescript from \"@rollup/plugin-typescript\";\n\nexport default {\n  input: \"./src/main.ts\",\n  output: {\n    file: \"./assets/main.js\",\n    format: \"iife\",\n    name: \"meydaDemo\",\n  },\n  plugins: [\n    nodePolyfills(),\n    nodeResolve({\n      browser: true,\n    }),\n    commonjs(),\n    typescript(),\n    terser(),\n  ],\n};\n"
  },
  {
    "path": "docs/showcase.md",
    "content": "---\nlayout: default\n---\n\nHere's a list of examples of projects that use Meyda. Would you like your Meyda project to be featured in our user showcase? [Please let us know!](https://github.com/meyda/meyda/issues/new?assignees=&labels=Showcase+Request&template=showcase-application.md&title=)\n\n- [modV](https://github.com/2xAA/modV) by [Sam Wray/2xAA](https://twitter.com/_2xAA)\n\n> A real time music visualisation VJing platform for use in live-performance contexts. Great with some chiptune!\n\n- [audiotrainer-server](https://github.com/Number-42/audiotrainer-server) by [Number-42](https://github.com/Number-42).\n\n> A simple program meant to correlate increases in heart rate in ASD-diagnosed children to changes in the features of ambient sounds (both sets of data prerecorded over the same period of time) with the intent of optimizing a training program helping them cope with sounds abnormally stress-inducing to them.\n\n- [OSEM](https://uduk.org/osem/) by [@uduk](https://github.com/uduk)\n\n> A computer generated melody project, optionally users can plug-in their guitar and/or MIDI key controller to dictate input harmonic. Meyda.js is being used to extract audio signal features, such as beat dynamic and music segmentation in order to help OSEM to produce high-quality music melody. It is meant to answer the question: \"Given an arbitrary backing track (format: wav, mp3) can computer compose?\"\n\n- [Picognizer](https://github.com/qurihara/picognizer) by [@qurihara](https://github.com/qurihara)\n\n> Picognizer is the 100% JavaScript library for detecting synthesized sounds (e.g. sound effects of video games, replayed speech or music, and sound alerts of home appliances). You can run it on your web browser without any server-side systems.\n\n- [Kaos Logo Generator](https://lusion.co/work/kaos-logo-generator/) by [Lusion](https://lusion.co/)\n\n> A system that allows web users to generate their unique logos using their voices\n\n- [threejs-meydajs-fftspectrum](https://threejs-meydajs-fftspectrum.surge.sh/) by [Andrea Bovo/spleennooname](https://github.com/spleennooname)\n\n> A spectrum fft on steroids: picks up microphone from audio stream and drives the webgl effect.\n\n- [Fluid Corpus Manipulation](https://learn.flucoma.org/reference/chroma/) by [Fluid Corpus Manipulation (James Bradbury, Ted Moore, Owen Green, Pierre Alexandre Tremblay)](https://www.flucoma.org/)\n\n> The Fluid Corpus Manipulation project(FluCoMa)instigates new musical ways of exploiting ever-growing banks of sound and gestures within the digital composition process, by bringing breakthroughs of signal decomposition DSP and machine learning to the toolset of techno-fluent computer composers, creative coders and digital artists.\n"
  },
  {
    "path": "docs/src/audio.ts",
    "content": "import * as Meyda from \"meyda\";\nvar _this;\nconst Audio = function (bufferSize) {\n  if (\n    Object.prototype.hasOwnProperty.call(window, \"webkitAudioContext\") &&\n    !Object.prototype.hasOwnProperty.call(window, \"AudioContext\")\n  ) {\n    // @ts-ignore\n    window.AudioContext = webkitAudioContext;\n  }\n\n  if (\n    Object.prototype.hasOwnProperty.call(navigator, \"webkitGetUserMedia\") &&\n    !Object.prototype.hasOwnProperty.call(navigator, \"getUserMedia\")\n  ) {\n    // @ts-ignore\n    navigator.getUserMedia = webkitGetUserMedia;\n    if (\n      !Object.prototype.hasOwnProperty.call(\n        AudioContext.prototype,\n        \"createScriptProcessor\"\n      )\n    ) {\n      AudioContext.prototype.createScriptProcessor =\n        // @ts-ignore\n        AudioContext.prototype.createJavaScriptNode;\n    }\n  }\n\n  this.context = new AudioContext();\n\n  let elvis = document.getElementById(\"elvisSong\");\n  let stream = this.context.createMediaElementSource(elvis);\n  stream.connect(this.context.destination);\n\n  this.meyda = Meyda.createMeydaAnalyzer({\n    audioContext: this.context,\n    source: stream,\n    bufferSize: bufferSize,\n    windowingFunction: \"blackman\",\n  });\n  // eslint-disable-next-line @typescript-eslint/no-this-alias\n  _this = this;\n  this.initializeMicrophoneSampling();\n};\n\nAudio.prototype.initializeMicrophoneSampling = function () {\n  var errorCallback = function () {\n    // We should fallback to an audio file here, but that's difficult on mobile\n    if (_this.context.state === \"suspended\") {\n      var resume = function () {\n        _this.context.resume();\n\n        setTimeout(function () {\n          if (_this.context.state === \"running\") {\n            document.body.removeEventListener(\"touchend\", resume, false);\n          }\n        }, 0);\n      };\n\n      document.body.addEventListener(\"touchend\", resume, false);\n    }\n  };\n\n  try {\n    const getUserMedia =\n      // @ts-ignore\n      navigator.webkitGetUserMedia ||\n      // @ts-ignore\n      navigator.getUserMedia ||\n      navigator.mediaDevices.getUserMedia;\n    var constraints = {\n      video: false,\n      audio: true,\n    };\n    var successCallback = function successCallback(mediaStream) {\n      document.getElementById(\"audioControl\")!.style.display = \"none\";\n      console.log(\"User allowed microphone access.\");\n      console.log(\"Initializing AudioNode from MediaStream\");\n      var source = _this.context.createMediaStreamSource(mediaStream);\n      console.log(\"Setting Meyda Source to Microphone\");\n      _this.meyda.setSource(source);\n      console.groupEnd();\n    };\n\n    console.log(\"Asking for permission...\");\n    navigator.mediaDevices\n      .getUserMedia({\n        audio: true,\n      })\n      .then(successCallback)\n      .catch(function (error) {\n        console.log(error);\n        getUserMedia(\n          {\n            audio: true,\n          },\n          successCallback,\n          function (e) {\n            errorCallback();\n          }\n        );\n      });\n  } catch (e) {\n    errorCallback();\n  }\n};\n\nAudio.prototype.get = function (features) {\n  _this.context.resume();\n  return _this.meyda.get(features);\n};\n\nexport default Audio;\n"
  },
  {
    "path": "docs/src/main.ts",
    "content": "import Audio from \"./audio\";\nimport {\n  Scene,\n  PerspectiveCamera,\n  LineBasicMaterial,\n  WebGLRenderer,\n  DirectionalLight,\n  Vector3,\n  ArrowHelper,\n  Group,\n  BufferAttribute,\n  BufferGeometry,\n  Line,\n} from \"three\";\n\nvar scale = [\"C\", \"C#\", \"D\", \"Eb\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"Bb\", \"B\"];\nconst bufferSize = 1024;\nlet a = new Audio(bufferSize);\n\nvar aspectRatio = 16 / 10;\nvar scene = new Scene();\nvar camera = new PerspectiveCamera(40, aspectRatio, 0.1, 1000);\n\nvar initializeFFTs = function (number, pointCount) {\n  var ffts: number[][] = [];\n  for (var i = 0; i < number; i++) {\n    ffts.push(\n      // Array.apply(null, Array(pointCount)).map(Number.prototype.valueOf, 0)\n      Array(pointCount).fill(0)\n    );\n  }\n\n  return ffts;\n};\n\nvar material = new LineBasicMaterial({\n  color: 0x00ff00,\n});\n\nvar yellowMaterial = new LineBasicMaterial({\n  color: 0x00ffff,\n});\n\nvar ffts = initializeFFTs(20, bufferSize);\nvar buffer = null;\n\nvar renderer = new WebGLRenderer({\n  canvas: document.querySelector(\"canvas\")!,\n});\n\nfunction resize() {\n  renderer.domElement.style.width = \"100%\";\n  renderer.domElement.style.height = \"auto\";\n\n  var resolution = (renderer.domElement.clientWidth / 16) * 10;\n  renderer.setPixelRatio(window.devicePixelRatio ? window.devicePixelRatio : 1);\n\n  renderer.setSize(resolution * aspectRatio, resolution);\n  renderer.domElement.style.width = \"100%\";\n  renderer.domElement.style.height = \"auto\";\n\n  camera.aspect = (resolution * aspectRatio) / resolution;\n  camera.updateProjectionMatrix();\n}\n\nresize();\nwindow.addEventListener(\"resize\", resize);\n\nvar directionalLight = new DirectionalLight(0xffffff, 0.5);\ndirectionalLight.position.set(0, 1, 1);\nscene.add(directionalLight);\n\ncamera.position.z = 5;\n\n// Unchanging variables\nconst length = 1;\nconst hex = 0xffff00;\nconst dir = new Vector3(0, 1, 0);\nconst rightDir = new Vector3(1, 0, 0);\nconst origin = new Vector3(1, -6, -15);\n\n// Variables we update\nlet centroidArrow = new ArrowHelper(dir, origin, length, hex);\nlet rolloffArrow = new ArrowHelper(dir, origin, length, 0x0000ff);\nlet rmsArrow = new ArrowHelper(rightDir, origin, length, 0xff00ff);\nlet lines = new Group(); // Lets create a seperate group for our lines\n// let loudnessLines = new Group();\nscene.add(centroidArrow);\nscene.add(rolloffArrow);\nscene.add(rmsArrow);\n\n// Render Spectrogram\nfor (let i = 0; i < ffts.length; i++) {\n  if (ffts[i]) {\n    let geometry = new BufferGeometry(); // May be a way to reuse this\n\n    let positions: ArrayLike<number> = new Float32Array(ffts[i].length * 3);\n\n    geometry.addAttribute(\"position\", new BufferAttribute(positions, 3));\n    geometry.setDrawRange(0, ffts[i].length);\n\n    let line = new Line(geometry, material);\n    lines.add(line);\n\n    positions = line.geometry.attributes.position.array;\n  }\n}\n\nlet bufferLineGeometry = new BufferGeometry();\nlet bufferLine = new Line(bufferLineGeometry, material);\n{\n  let positions: ArrayLike<number> = new Float32Array(bufferSize * 3);\n  bufferLineGeometry.addAttribute(\n    \"position\",\n    new BufferAttribute(positions, 3)\n  );\n  bufferLineGeometry.setDrawRange(0, bufferSize);\n\n  positions = bufferLine.geometry.attributes.position.array;\n}\nscene.add(bufferLine);\nscene.add(lines);\n\n// scene.add(loudnessLines);\n\nlet features: { [key: string]: any } | undefined = undefined;\nlet chromaWrapper = document.querySelector(\"#chroma\");\nlet mfccWrapper = document.querySelector(\"#mfcc\");\n\nfunction render() {\n  features = a.get([\n    \"amplitudeSpectrum\",\n    \"spectralCentroid\",\n    \"spectralRolloff\",\n    \"loudness\",\n    \"rms\",\n    \"chroma\",\n    \"mfcc\",\n  ]);\n  if (features) {\n    if (chromaWrapper && features.chroma) {\n      chromaWrapper.innerHTML = features.chroma.reduce(\n        (acc, v, i) =>\n          `${acc}\n          <div class=\"chroma-band\" style=\"background-color: rgba(0,${Math.round(\n            255 * v\n          )},0,1)\">${scale[i]}</div>`,\n        \"\"\n      );\n    }\n\n    if (mfccWrapper && features.mfcc) {\n      mfccWrapper.innerHTML = features.mfcc.reduce(\n        (acc, v, i) =>\n          `${acc}\n          <div class=\"mfcc-band\" style=\"background-color: rgba(0,${\n            Math.round(v + 25) * 5\n          },0,1)\">${i}</div>`,\n        \"\"\n      );\n    }\n\n    ffts.pop();\n    ffts.unshift(features.amplitudeSpectrum);\n    const windowedSignalBuffer = a.meyda._m.signal;\n\n    for (let i = 0; i < ffts.length; i++) {\n      // @ts-ignore\n      var positions = lines.children[i].geometry.attributes.position.array;\n      var index = 0;\n\n      for (var j = 0; j < ffts[i].length * 3; j++) {\n        positions[index++] = 10.7 + 8 * Math.log10(j / ffts[i].length);\n        positions[index++] = -5 + 0.1 * ffts[i][j];\n        positions[index++] = -15 - i;\n      }\n\n      // @ts-ignore\n      lines.children[i].geometry.attributes.position.needsUpdate = true;\n    }\n\n    // Render Spectral Centroid Arrow\n    if (features.spectralCentroid) {\n      // SpectralCentroid is an awesome variable name\n      // We're really just updating the x axis\n      centroidArrow.position.set(\n        10.7 + 8 * Math.log10(features.spectralCentroid / (bufferSize / 2)),\n        -6,\n        -15\n      );\n    }\n\n    // Render Spectral Rolloff Arrow\n    if (features.spectralRolloff) {\n      // We're really just updating the x axis\n      var rolloff = features.spectralRolloff / 22050;\n      rolloffArrow.position.set(10.7 + 8 * Math.log10(rolloff), -6, -15);\n    }\n    // Render RMS Arrow\n    if (features.rms) {\n      // We're really just updating the y axis\n      rmsArrow.position.set(-11, -5 + 10 * features.rms, -15);\n    }\n\n    if (windowedSignalBuffer) {\n      // Render Signal Buffer\n      let positions = bufferLine.geometry.attributes.position.array;\n      let index = 0;\n      for (var i = 0; i < bufferSize; i++) {\n        // @ts-ignore\n        positions[index++] = -11 + (22 * i) / bufferSize;\n        // @ts-ignore\n        positions[index++] = 4 + windowedSignalBuffer[i] * 5;\n        // @ts-ignore\n        positions[index++] = -25;\n      }\n      bufferLine.geometry.attributes.position.needsUpdate = true;\n    }\n\n    // // Render loudness\n    // if (features.loudness && features.loudness.specific) {\n    //   for (var i = 0; i < features.loudness.specific.length; i++) {\n    //     let geometry = new Geometry();\n    //     geometry.vertices.push(new Vector3(\n    //       -11 + 22 * i / features.loudness.specific.length,\n    //       -6 + features.loudness.specific[i] * 3,\n    //       -15\n    //     ));\n    //     geometry.vertices.push(new Vector3(\n    //       -11 + 22 * i / features.loudness.specific.length + 22 /\n    //       features.loudness.specific.length,\n    //       -6 + features.loudness.specific[i] * 3,\n    //       -15\n    //     ));\n    //     loudnessLines.add(new Line(geometry, yellowMaterial));\n    //     geometry.dispose();\n    //   }\n    // }\n\n    // for (let c = 0; c < loudnessLines.children.length; c++) {\n    //   loudnessLines.remove(loudnessLines.children[c]); //forEach is slow\n    // }\n  }\n\n  requestAnimationFrame(render);\n  renderer.render(scene, camera);\n}\n\nrender();\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"meyda\",\n  \"version\": \"0.0.0-development\",\n  \"description\": \"Real-time feature extraction for the web audio api\",\n  \"main\": \"./dist/node/main.js\",\n  \"browser\": \"./dist/web/meyda.min.js\",\n  \"jsnext:main\": \"./dist/esm/main.js\",\n  \"types\": \"./dist/esm/main.d.ts\",\n  \"bin\": {\n    \"meyda\": \"./bin/cli.js\"\n  },\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"build\": \"NODE_ENV=production; tsc && rollup -c rollup.config.mjs\",\n    \"lint\": \"tsc --noEmit && eslint -f compact --ext .js,.jsx,.ts,.tsx src __tests__ docs/src bin\",\n    \"generatereferencedocs\": \"typedoc src/meyda-wa.ts src/main.ts --out docs/reference --readme none\",\n    \"semantic-release\": \"semantic-release\",\n    \"prepare\": \"husky install\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/meyda/meyda.git\"\n  },\n  \"keywords\": [\n    \"audio\",\n    \"feature\",\n    \"extraction\",\n    \"music\",\n    \"sound\",\n    \"information\",\n    \"retrieval\"\n  ],\n  \"authors\": [\n    \"Hugh Rawlinson <hughr2005+meydapackagejson@gmail.com>\",\n    \"Nevo Segal <nevosegal@gmail.com>\",\n    \"Jakub Fiala\",\n    \"Sam Wray <sam@wray.pro>\"\n  ],\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/meyda/meyda/issues\"\n  },\n  \"homepage\": \"https://github.com/meyda/meyda\",\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^17.8.1\",\n    \"@commitlint/config-conventional\": \"^17.8.1\",\n    \"@rollup/plugin-commonjs\": \"^25.0.7\",\n    \"@rollup/plugin-terser\": \"^0.4.4\",\n    \"@rollup/plugin-typescript\": \"^11.1.6\",\n    \"@types/jest\": \"^29.5.12\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.62.0\",\n    \"@typescript-eslint/parser\": \"^5.62.0\",\n    \"commitizen\": \"^4.3.0\",\n    \"eslint\": \"^8.57.0\",\n    \"glob\": \"^10.3.12\",\n    \"husky\": \"^8.0.3\",\n    \"jest\": \"^29.7.0\",\n    \"jest-environment-jsdom\": \"^29.7.0\",\n    \"lint-staged\": \"^13.3.0\",\n    \"prettier\": \"^2.8.8\",\n    \"rollup\": \"^4.16.0\",\n    \"semantic-release\": \"^21.1.2\",\n    \"ts-jest\": \"^29.1.2\",\n    \"tslib\": \"^2.6.2\",\n    \"typedoc\": \"^0.25.13\",\n    \"typescript\": \"^5.4.5\"\n  },\n  \"dependencies\": {\n    \"@rollup/plugin-node-resolve\": \"^15.2.3\",\n    \"dct\": \"0.1.0\",\n    \"fftjs\": \"0.0.4\",\n    \"node-getopt\": \"^0.3.2\",\n    \"wav\": \"^1.0.2\"\n  },\n  \"jest\": {\n    \"preset\": \"ts-jest\",\n    \"testEnvironment\": \"node\",\n    \"reporters\": [\n      \"default\"\n    ],\n    \"testPathIgnorePatterns\": [\n      \"__tests__/TestData.ts\"\n    ]\n  },\n  \"commitlint\": {\n    \"extends\": [\n      \"@commitlint/config-conventional\"\n    ],\n    \"rules\": {\n      \"body-max-line-length\": [\n        0,\n        \"always\",\n        1000\n      ]\n    }\n  },\n  \"eslintConfig\": {\n    \"root\": true,\n    \"parser\": \"@typescript-eslint/parser\",\n    \"plugins\": [\n      \"@typescript-eslint\"\n    ],\n    \"rules\": {\n      \"@typescript-eslint/explicit-module-boundary-types\": 0,\n      \"@typescript-eslint/ban-ts-comment\": 0,\n      \"@typescript-eslint/no-unused-vars\": 0,\n      \"@typescript-eslint/no-var-requires\": 0,\n      \"@typescript-eslint/no-explicit-any\": 0,\n      \"@typescript-eslint/no-non-null-assertion\": 0,\n      \"no-undef\": 0,\n      \"no-var\": 0,\n      \"prefer-const\": 0\n    },\n    \"extends\": [\n      \"eslint:recommended\",\n      \"plugin:@typescript-eslint/recommended\"\n    ]\n  },\n  \"lint-staged\": {\n    \"**/*\": \"prettier --write --ignore-unknown\"\n  },\n  \"release\": {\n    \"branches\": [\n      {\n        \"name\": \"main\"\n      },\n      {\n        \"name\": \"v6\",\n        \"channel\": \"v6\",\n        \"prerelease\": \"beta\"\n      }\n    ]\n  },\n  \"workspaces\": [\n    \"docs\"\n  ],\n  \"prettier\": {\n    \"singleQuote\": false,\n    \"semi\": true,\n    \"useTabs\": false,\n    \"tabWidth\": 2,\n    \"bracketSpacing\": true,\n    \"arrowParens\": \"always\",\n    \"trailingComma\": \"es5\"\n  }\n}\n"
  },
  {
    "path": "rollup.config.mjs",
    "content": "/* eslint-env es2021 */\nimport terser from \"@rollup/plugin-terser\";\nimport commonjs from \"@rollup/plugin-commonjs\";\nimport typescript from \"@rollup/plugin-typescript\";\nimport nodeResolve from \"@rollup/plugin-node-resolve\";\nimport { glob } from \"glob\";\n\nconst plugins = [nodeResolve(), commonjs(), typescript()];\n\nconst SOURCE_FILES = glob\n  .sync(\"src/**/*.ts\")\n  .filter((filename) => !filename.endsWith(\".d.ts\"));\n\nconst config = {\n  input: \"src/main.ts\",\n  output: {\n    file: \"dist/web/meyda.js\",\n    format: \"umd\",\n    name: \"Meyda\",\n    sourcemap: true,\n  },\n  plugins,\n};\n\nfunction minified(config) {\n  return Object.assign({}, config, {\n    output: Object.assign({}, config.output, {\n      file: config.output.file.replace(\".js\", \".min.js\"),\n    }),\n    plugins: [...config.plugins, terser()],\n  });\n}\n\nconst NODE_CONFIGS = SOURCE_FILES.map((sourcefile) => ({\n  input: sourcefile,\n  output: {\n    file: sourcefile.replace(\"src\", \"dist/node\").replace(\".ts\", \".js\"),\n    format: \"cjs\",\n    exports: \"auto\",\n  },\n  plugins,\n}));\n\nexport default [config, minified(config), ...NODE_CONFIGS];\n"
  },
  {
    "path": "src/extractors/chroma.ts",
    "content": "export default function ({\n  ampSpectrum,\n  chromaFilterBank,\n}: {\n  ampSpectrum: Float32Array;\n  chromaFilterBank: number[][];\n}): number[] {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError(\"Valid ampSpectrum is required to generate chroma\");\n  }\n  if (typeof chromaFilterBank !== \"object\") {\n    throw new TypeError(\n      \"Valid chromaFilterBank is required to generate chroma\"\n    );\n  }\n\n  var chromagram = chromaFilterBank.map((row, i) =>\n    ampSpectrum.reduce((acc, v, j) => acc + v * row[j], 0)\n  );\n  var maxVal = Math.max(...chromagram);\n\n  return maxVal ? chromagram.map((v) => v / maxVal) : chromagram;\n}\n"
  },
  {
    "path": "src/extractors/energy.ts",
    "content": "export default function ({ signal }: { signal: Float32Array }): number {\n  if (typeof signal !== \"object\") {\n    throw new TypeError();\n  }\n\n  var energy = 0;\n  for (var i = 0; i < signal.length; i++) {\n    energy += Math.pow(Math.abs(signal[i]), 2);\n  }\n\n  return energy;\n}\n"
  },
  {
    "path": "src/extractors/extractorUtilities.ts",
    "content": "export function mu(i: number, amplitudeSpect: Float32Array): number {\n  var numerator = 0;\n  var denominator = 0;\n  for (var k = 0; k < amplitudeSpect.length; k++) {\n    numerator += Math.pow(k, i) * Math.abs(amplitudeSpect[k]);\n    denominator += amplitudeSpect[k];\n  }\n  return numerator / denominator;\n}\n"
  },
  {
    "path": "src/extractors/loudness.ts",
    "content": "export default function ({\n  ampSpectrum,\n  barkScale,\n  numberOfBarkBands = 24,\n}: {\n  ampSpectrum: Float32Array;\n  barkScale: Float32Array;\n  numberOfBarkBands?: number;\n}): {\n  specific: Float32Array;\n  total: number;\n} {\n  if (typeof ampSpectrum !== \"object\" || typeof barkScale !== \"object\") {\n    throw new TypeError();\n  }\n\n  var NUM_BARK_BANDS = numberOfBarkBands;\n  var specific = new Float32Array(NUM_BARK_BANDS);\n  var total = 0;\n  var normalisedSpectrum = ampSpectrum;\n  var bbLimits = new Int32Array(NUM_BARK_BANDS + 1);\n\n  bbLimits[0] = 0;\n  var currentBandEnd =\n    barkScale[normalisedSpectrum.length - 1] / NUM_BARK_BANDS;\n  var currentBand = 1;\n  for (let i = 0; i < normalisedSpectrum.length; i++) {\n    while (barkScale[i] > currentBandEnd) {\n      bbLimits[currentBand++] = i;\n      currentBandEnd =\n        (currentBand * barkScale[normalisedSpectrum.length - 1]) /\n        NUM_BARK_BANDS;\n    }\n  }\n\n  bbLimits[NUM_BARK_BANDS] = normalisedSpectrum.length - 1;\n\n  //process\n\n  for (let i = 0; i < NUM_BARK_BANDS; i++) {\n    let sum = 0;\n    for (let j = bbLimits[i]; j < bbLimits[i + 1]; j++) {\n      sum += normalisedSpectrum[j];\n    }\n\n    specific[i] = Math.pow(sum, 0.23);\n  }\n\n  //get total loudness\n  for (let i = 0; i < specific.length; i++) {\n    total += specific[i];\n  }\n\n  return {\n    specific: specific,\n    total: total,\n  };\n}\n"
  },
  {
    "path": "src/extractors/melBands.ts",
    "content": "import extractPowerSpectrum from \"./powerSpectrum\";\n\nexport default function ({\n  ampSpectrum,\n  melFilterBank,\n  bufferSize,\n}: {\n  ampSpectrum: Float32Array;\n  melFilterBank: number[][];\n  bufferSize: number;\n}): number[] {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError(\"Valid ampSpectrum is required to generate melBands\");\n  }\n  if (typeof melFilterBank !== \"object\") {\n    throw new TypeError(\"Valid melFilterBank is required to generate melBands\");\n  }\n\n  let powSpec = extractPowerSpectrum({ ampSpectrum });\n  let numFilters = melFilterBank.length;\n  let filtered: Float32Array[] = Array(numFilters);\n  let loggedMelBands: Float32Array = new Float32Array(numFilters);\n\n  for (let i = 0; i < loggedMelBands.length; i++) {\n    filtered[i] = new Float32Array(bufferSize / 2);\n    loggedMelBands[i] = 0;\n    for (let j = 0; j < bufferSize / 2; j++) {\n      //point-wise multiplication between power spectrum and filterbanks.\n      filtered[i][j] = melFilterBank[i][j] * powSpec[j];\n\n      //summing up all of the coefficients into one array\n      loggedMelBands[i] += filtered[i][j];\n    }\n\n    //log each coefficient.\n    loggedMelBands[i] = Math.log(loggedMelBands[i] + 1);\n  }\n  return Array.prototype.slice.call(loggedMelBands);\n}\n"
  },
  {
    "path": "src/extractors/mfcc.ts",
    "content": "import extractMelBands from \"./melBands\";\nimport dct from \"dct\";\n\nexport default function ({\n  ampSpectrum,\n  melFilterBank,\n  numberOfMFCCCoefficients,\n  bufferSize,\n}: {\n  ampSpectrum: Float32Array;\n  melFilterBank: number[][];\n  numberOfMFCCCoefficients: number;\n  bufferSize: number;\n}): number[] {\n  // Tutorial from:\n  // http://practicalcryptography.com/miscellaneous/machine-learning\n  // /guide-mel-frequency-cepstral-coefficients-mfccs/\n  // @ts-ignore\n\n  let _numberOfMFCCCoefficients = Math.min(\n    40,\n    Math.max(1, numberOfMFCCCoefficients || 13)\n  );\n\n  let numFilters = melFilterBank.length;\n  if (numFilters < _numberOfMFCCCoefficients) {\n    throw new Error(\n      \"Insufficient filter bank for requested number of coefficients\"\n    );\n  }\n  const loggedMelBandsArray = extractMelBands({\n    ampSpectrum,\n    melFilterBank,\n    bufferSize,\n  });\n  let mfccs: number[] = dct(loggedMelBandsArray).slice(\n    0,\n    _numberOfMFCCCoefficients\n  );\n\n  return mfccs;\n}\n"
  },
  {
    "path": "src/extractors/perceptualSharpness.ts",
    "content": "import loudness from \"./loudness\";\n\nexport default function ({\n  ampSpectrum,\n  barkScale,\n}: {\n  ampSpectrum: Float32Array;\n  barkScale: Float32Array;\n}): number {\n  var loudnessValue = loudness({ ampSpectrum, barkScale });\n  var spec = loudnessValue.specific;\n  var output = 0;\n\n  for (var i = 0; i < spec.length; i++) {\n    if (i < 15) {\n      output += (i + 1) * spec[i + 1];\n    } else {\n      output += 0.066 * Math.exp(0.171 * (i + 1));\n    }\n  }\n\n  output *= 0.11 / loudnessValue.total;\n\n  return output;\n}\n"
  },
  {
    "path": "src/extractors/perceptualSpread.ts",
    "content": "import loudness from \"./loudness\";\n\nexport default function ({\n  ampSpectrum,\n  barkScale,\n}: {\n  ampSpectrum: Float32Array;\n  barkScale: Float32Array;\n}): number {\n  var loudnessValue = loudness({ ampSpectrum, barkScale });\n\n  var max = 0;\n  for (var i = 0; i < loudnessValue.specific.length; i++) {\n    if (loudnessValue.specific[i] > max) {\n      max = loudnessValue.specific[i];\n    }\n  }\n\n  var spread = Math.pow((loudnessValue.total - max) / loudnessValue.total, 2);\n\n  return spread;\n}\n"
  },
  {
    "path": "src/extractors/powerSpectrum.ts",
    "content": "export default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): Float32Array {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  var powerSpectrum = new Float32Array(ampSpectrum.length);\n  for (var i = 0; i < powerSpectrum.length; i++) {\n    powerSpectrum[i] = Math.pow(ampSpectrum[i], 2);\n  }\n\n  return powerSpectrum;\n}\n"
  },
  {
    "path": "src/extractors/rms.ts",
    "content": "export default function ({ signal }: { signal: Float32Array }): number {\n  // Keeping this bad runtime typecheck for consistency\n  if (typeof signal !== \"object\") {\n    throw new TypeError();\n  }\n\n  var rms = 0;\n  for (var i = 0; i < signal.length; i++) {\n    rms += Math.pow(signal[i], 2);\n  }\n\n  rms = rms / signal.length;\n  rms = Math.sqrt(rms);\n\n  return rms;\n}\n"
  },
  {
    "path": "src/extractors/spectralCentroid.ts",
    "content": "import { mu } from \"./extractorUtilities\";\n\nexport default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  return mu(1, ampSpectrum);\n}\n"
  },
  {
    "path": "src/extractors/spectralCrest.ts",
    "content": "export default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  var rms = 0;\n  var peak = -Infinity;\n\n  ampSpectrum.forEach((x) => {\n    rms += Math.pow(x, 2);\n    peak = x > peak ? x : peak;\n  });\n\n  rms = rms / ampSpectrum.length;\n  rms = Math.sqrt(rms);\n\n  return peak / rms;\n}\n"
  },
  {
    "path": "src/extractors/spectralFlatness.ts",
    "content": "export default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  var numerator = 0;\n  var denominator = 0;\n  for (var i = 0; i < ampSpectrum.length; i++) {\n    numerator += Math.log(ampSpectrum[i]);\n    denominator += ampSpectrum[i];\n  }\n\n  return (\n    (Math.exp(numerator / ampSpectrum.length) * ampSpectrum.length) /\n    denominator\n  );\n}\n"
  },
  {
    "path": "src/extractors/spectralFlux.ts",
    "content": "// This file isn't being typechecked at all because there are major issues with it.\n// See #852 for details. Once that's merged, this file should be typechecked.\n// @ts-nocheck\nexport default function ({\n  signal,\n  previousSignal,\n  bufferSize,\n}: {\n  signal: Float32Array;\n  previousSignal: Float32Array;\n  bufferSize: number;\n}): number {\n  if (typeof signal !== \"object\" || typeof previousSignal != \"object\") {\n    throw new TypeError();\n  }\n\n  let sf = 0;\n  for (let i = -(bufferSize / 2); i < signal.length / 2 - 1; i++) {\n    x = Math.abs(signal[i]) - Math.abs(previousSignal[i]);\n    sf += (x + Math.abs(x)) / 2;\n  }\n\n  return sf;\n}\n"
  },
  {
    "path": "src/extractors/spectralKurtosis.ts",
    "content": "import { mu } from \"./extractorUtilities\";\n\nexport default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  var ampspec = ampSpectrum;\n  var mu1 = mu(1, ampspec);\n  var mu2 = mu(2, ampspec);\n  var mu3 = mu(3, ampspec);\n  var mu4 = mu(4, ampspec);\n  var numerator = -3 * Math.pow(mu1, 4) + 6 * mu1 * mu2 - 4 * mu1 * mu3 + mu4;\n  var denominator = Math.pow(Math.sqrt(mu2 - Math.pow(mu1, 2)), 4);\n  return numerator / denominator;\n}\n"
  },
  {
    "path": "src/extractors/spectralRolloff.ts",
    "content": "export default function ({\n  ampSpectrum,\n  sampleRate,\n}: {\n  ampSpectrum: Float32Array;\n  sampleRate: number;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  var ampspec = ampSpectrum;\n\n  //calculate nyquist bin\n  var nyqBin = sampleRate / (2 * (ampspec.length - 1));\n  var ec = 0;\n  for (var i = 0; i < ampspec.length; i++) {\n    ec += ampspec[i];\n  }\n\n  var threshold = 0.99 * ec;\n  var n = ampspec.length - 1;\n  while (ec > threshold && n >= 0) {\n    ec -= ampspec[n];\n    --n;\n  }\n\n  return (n + 1) * nyqBin;\n}\n"
  },
  {
    "path": "src/extractors/spectralSkewness.ts",
    "content": "import { mu } from \"./extractorUtilities\";\n\nexport default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  var mu1 = mu(1, ampSpectrum);\n  var mu2 = mu(2, ampSpectrum);\n  var mu3 = mu(3, ampSpectrum);\n  var numerator = 2 * Math.pow(mu1, 3) - 3 * mu1 * mu2 + mu3;\n  var denominator = Math.pow(Math.sqrt(mu2 - Math.pow(mu1, 2)), 3);\n  return numerator / denominator;\n}\n"
  },
  {
    "path": "src/extractors/spectralSlope.ts",
    "content": "export default function ({\n  ampSpectrum,\n  sampleRate,\n  bufferSize,\n}: {\n  ampSpectrum: Float32Array;\n  sampleRate: number;\n  bufferSize: number;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  //linear regression\n  let ampSum = 0;\n  let freqSum = 0;\n  let freqs = new Float32Array(ampSpectrum.length);\n  let powFreqSum = 0;\n  let ampFreqSum = 0;\n\n  for (var i = 0; i < ampSpectrum.length; i++) {\n    ampSum += ampSpectrum[i];\n    let curFreq = (i * sampleRate) / bufferSize;\n    freqs[i] = curFreq;\n    powFreqSum += curFreq * curFreq;\n    freqSum += curFreq;\n    ampFreqSum += curFreq * ampSpectrum[i];\n  }\n\n  return (\n    (ampSpectrum.length * ampFreqSum - freqSum * ampSum) /\n    (ampSum * (powFreqSum - Math.pow(freqSum, 2)))\n  );\n}\n"
  },
  {
    "path": "src/extractors/spectralSpread.ts",
    "content": "import { mu } from \"./extractorUtilities\";\n\nexport default function ({\n  ampSpectrum,\n}: {\n  ampSpectrum: Float32Array;\n}): number {\n  if (typeof ampSpectrum !== \"object\") {\n    throw new TypeError();\n  }\n\n  return Math.sqrt(mu(2, ampSpectrum) - Math.pow(mu(1, ampSpectrum), 2));\n}\n"
  },
  {
    "path": "src/extractors/zcr.ts",
    "content": "export default function ({ signal }: { signal: Float32Array }): number {\n  if (typeof signal !== \"object\") {\n    throw new TypeError();\n  }\n\n  var zcr = 0;\n  for (var i = 1; i < signal.length; i++) {\n    if (\n      (signal[i - 1] >= 0 && signal[i] < 0) ||\n      (signal[i - 1] < 0 && signal[i] >= 0)\n    ) {\n      zcr++;\n    }\n  }\n\n  return zcr;\n}\n"
  },
  {
    "path": "src/featureExtractors.ts",
    "content": "import rms from \"./extractors/rms\";\nimport energy from \"./extractors/energy\";\nimport spectralSlope from \"./extractors/spectralSlope\";\nimport spectralCentroid from \"./extractors/spectralCentroid\";\nimport spectralRolloff from \"./extractors/spectralRolloff\";\nimport spectralFlatness from \"./extractors/spectralFlatness\";\nimport spectralSpread from \"./extractors/spectralSpread\";\nimport spectralSkewness from \"./extractors/spectralSkewness\";\nimport spectralKurtosis from \"./extractors/spectralKurtosis\";\nimport zcr from \"./extractors/zcr\";\nimport loudness from \"./extractors/loudness\";\nimport perceptualSpread from \"./extractors/perceptualSpread\";\nimport perceptualSharpness from \"./extractors/perceptualSharpness\";\nimport mfcc from \"./extractors/mfcc\";\nimport chroma from \"./extractors/chroma\";\nimport powerSpectrum from \"./extractors/powerSpectrum\";\nimport spectralFlux from \"./extractors/spectralFlux\";\nimport spectralCrest from \"./extractors/spectralCrest\";\nimport melBands from \"./extractors/melBands\";\n\nlet buffer = function (args) {\n  return args.signal;\n};\n\nlet complexSpectrum = function (args) {\n  return args.complexSpectrum;\n};\n\nlet amplitudeSpectrum = function (args) {\n  return args.ampSpectrum;\n};\n\nexport {\n  buffer,\n  rms,\n  energy,\n  complexSpectrum,\n  spectralSlope,\n  spectralCentroid,\n  spectralRolloff,\n  spectralFlatness,\n  spectralSpread,\n  spectralSkewness,\n  spectralKurtosis,\n  amplitudeSpectrum,\n  zcr,\n  loudness,\n  perceptualSpread,\n  perceptualSharpness,\n  powerSpectrum,\n  mfcc,\n  chroma,\n  spectralFlux,\n  spectralCrest,\n  melBands\n};\n"
  },
  {
    "path": "src/main.ts",
    "content": "/**\n * This file contains the default export for Meyda, you probably want to check\n * out {@link default}\n *\n * @module Meyda\n */\n\nimport * as utilities from \"./utilities\";\nimport * as extractors from \"./featureExtractors\";\nimport { fft } from \"fftjs\";\nimport { MeydaAnalyzer, MeydaAnalyzerOptions } from \"./meyda-wa\";\nexport interface MeydaFeaturesObject {\n  amplitudeSpectrum: Float32Array;\n  buffer: number[];\n  chroma: number[];\n  complexSpectrum: {\n    real: number[];\n    imag: number[];\n  };\n  energy: number;\n  loudness: {\n    specific: Float32Array;\n    total: number;\n  };\n  mfcc: number[];\n  perceptualSharpness: number;\n  perceptualSpread: number;\n  powerSpectrum: Float32Array;\n  rms: number;\n  spectralCentroid: number;\n  spectralFlatness: number;\n  spectralKurtosis: number;\n  spectralRolloff: number;\n  spectralSkewness: number;\n  spectralSlope: number;\n  spectralSpread: number;\n  spectralCrest: number;\n  zcr: number;\n}\n\nexport type MeydaWindowingFunction =\n  | \"blackman\"\n  | \"sine\"\n  | \"hanning\"\n  | \"hamming\";\n\nexport type MeydaAudioFeature =\n  | \"amplitudeSpectrum\"\n  | \"chroma\"\n  | \"complexSpectrum\"\n  | \"energy\"\n  | \"loudness\"\n  | \"mfcc\"\n  | \"perceptualSharpness\"\n  | \"perceptualSpread\"\n  | \"powerSpectrum\"\n  | \"rms\"\n  | \"spectralCentroid\"\n  | \"spectralFlatness\"\n  | \"spectralFlux\"\n  | \"spectralKurtosis\"\n  | \"spectralRolloff\"\n  | \"spectralSkewness\"\n  | \"spectralSlope\"\n  | \"spectralSpread\"\n  | \"spectralCrest\"\n  | \"zcr\"\n  | \"buffer\"\n  | \"melBands\";\n\n/**\n * A type representing an audio signal. In general it should be an array of\n * numbers that is sliceable. Float32Array is assignable here, and we generally\n * expect that most signals will be in this format.\n */\nexport type MeydaSignal = SliceableArrayLike<number> | Float32Array;\n\nexport interface SliceableArrayLike<T> extends ArrayLike<T> {\n  slice(start: number, end: number): SliceableArrayLike<T>;\n}\n\n/**\n * Meyda is a library for extracting audio features from an audio signal.\n *\n * The primary entry points are {@link extract} for audio feature extraction on\n * raw signals you have in memory, and {@link createMeydaAnalyzer}, which\n * provides a {@link MeydaAnalyzer} object that can be used to extract features\n * on a Web Audio API AudioNode. The latter is only supported on web targets,\n * though if you're using the Web Audio API in a non-web target, we'd love to\n * hear from you.\n *\n * We also expose {@link listAvailableFeatureExtractors} which returns a list of the\n * available feature extractors, and {@link windowing}, which lets you apply\n * a windowing function to your signal outside of Meyda.\n *\n * We existed long before esmodules, so our backwards compatible API may seem\n * unusual. We export a default object, with read/write fields that control\n * various parameters of the audio feature extraction process. We're working on\n * a new interface, check out [#257](https://github.com/meyda/meyda/issues/257)\n * for more information.\n */\ninterface Meyda {\n  /**\n   * Meyda stores a reference to the relevant audio context here for use inside\n   * the Web Audio API.\n   */\n  audioContext: AudioContext | null;\n  /**\n   * Meyda keeps an internal ScriptProcessorNode in which it runs audio feature\n   * extraction. The ScriptProcessorNode is stored in this member variable.\n   * @hidden\n   */\n  spn: ScriptProcessorNode | null;\n  /**\n   * The length of each buffer that Meyda will extract audio on. When recieving\n   * input via the Web Audio API, the Script Processor Node chunks incoming audio\n   * into arrays of this length. Longer buffers allow for more precision in the\n   * frequency domain, but increase the amount of time it takes for Meyda to\n   * output a set of audio features for the buffer. You can calculate how many\n   * sets of audio features Meyda will output per second by dividing the\n   * buffer size by the sample rate. If you're using Meyda for visualisation,\n   * make sure that you're collecting audio features at a rate that's faster\n   * than or equal to the video frame rate you expect.\n   */\n  bufferSize: number;\n  /**\n   * The number of samples per second of the incoming audio. This affects\n   * feature extraction outside of the context of the Web Audio API, and must be\n   * set accurately - otherwise calculations will be off.\n   */\n  sampleRate: number;\n  /**\n   * The number of Mel bands to use in the Mel Frequency Cepstral Co-efficients\n   * feature extractor\n   */\n  melBands: number;\n  /**\n   * The number of bands to divide the spectrum into for the Chroma feature\n   * extractor. 12 is the standard number of semitones per octave in the western\n   * music tradition, but Meyda can use an arbitrary number of bands, which\n   * can be useful for microtonal music.\n   */\n  chromaBands: number;\n  /**\n   * A function you can provide that will be called for each buffer that Meyda\n   * receives from its source node\n   * @hidden\n   */\n  callback: ((features: Partial<MeydaFeaturesObject>) => void | null) | null;\n  /**\n   * Specify the windowing function to apply to the buffer before the\n   * transformation from the time domain to the frequency domain is performed\n   *\n   * The default windowing function is the hanning window.\n   */\n  windowingFunction: string;\n  featureExtractors: any;\n  /** @hidden */\n  EXTRACTION_STARTED: boolean;\n  /**\n   * The number of MFCC co-efficients that the MFCC feature extractor should return\n   */\n  numberOfMFCCCoefficients: number;\n  /**\n   * The number of bark bands that the loudness feature extractor should return\n   */\n  numberOfBarkBands: number;\n  /** @hidden */\n  _featuresToExtract: string[];\n  /**\n   * Apply a windowing function to a signal\n   */\n  windowing: (\n    signal: MeydaSignal,\n    windowname?: MeydaWindowingFunction\n  ) => MeydaSignal;\n  /** @hidden */\n  _errors: { [key: string]: Error };\n  /**\n   * @summary\n   * Create a MeydaAnalyzer\n   *\n   * A factory function for creating a MeydaAnalyzer, the interface for using\n   * Meyda in the context of Web Audio.\n   *\n   * @example\n   * ```javascript\n   * const analyzer = Meyda.createMeydaAnalyzer({\n   *   \"audioContext\": audioContext,\n   *   \"source\": source,\n   *   \"bufferSize\": 512,\n   *   \"featureExtractors\": [\"rms\"],\n   *   \"inputs\": 2,\n   *   \"callback\": features => {\n   *     levelRangeElement.value = features.rms;\n   *   }\n   * });\n   * ```\n   */\n  createMeydaAnalyzer: (MeydaAnalyzerOptions) => MeydaAnalyzer;\n  /**\n   * List available audio feature extractors. Return format provides the key to\n   * be used in selecting the extractor in the extract methods\n   */\n  listAvailableFeatureExtractors: () => MeydaAudioFeature[];\n  /**\n   * Extract an audio feature from a buffer\n   *\n   * Unless `meyda.windowingFunction` is set otherwise, `extract` will\n   * internally apply a hanning window to the buffer prior to conversion into\n   * the frequency domain.\n   *\n   * @param {(string|Array.<string>)} feature - the feature you want to extract\n   * @param {Array.<number>} signal\n   * An array of numbers that represents the signal. It should be of length\n   * `meyda.bufferSize`\n   * @param {Array.<number>} [previousSignal] - the previous buffer\n   * @returns {object} Features\n   * @example\n   * ```javascript\n   * meyda.bufferSize = 2048;\n   * const features = meyda.extract(['zcr', 'spectralCentroid'], signal);\n   * ```\n   *\n   * Aside: yes, you need to modify the value of a field of the default export\n   * of the package to change the buffer size. We realise this now seems not\n   * a good practice. See [this issue](https://github.com/meyda/meyda/issues/257)\n   * to track our progress on implementing a more modern API.\n   */\n  extract: (\n    feature: MeydaAudioFeature | MeydaAudioFeature[],\n    signal: MeydaSignal,\n    previousSignal?: MeydaSignal\n  ) => Partial<MeydaFeaturesObject> | null;\n}\n\nconst Meyda: Meyda = {\n  audioContext: null,\n  spn: null,\n  bufferSize: 512,\n  sampleRate: 44100,\n  melBands: 26,\n  chromaBands: 12,\n  callback: null,\n  windowingFunction: \"hanning\",\n  featureExtractors: extractors,\n  EXTRACTION_STARTED: false,\n  numberOfMFCCCoefficients: 13,\n  numberOfBarkBands: 24,\n  _featuresToExtract: [],\n  windowing: utilities.applyWindow,\n  /** @hidden */\n  _errors: {\n    notPow2: new Error(\n      \"Meyda: Buffer size must be a power of 2, e.g. 64 or 512\"\n    ),\n    featureUndef: new Error(\"Meyda: No features defined.\"),\n    invalidFeatureFmt: new Error(\"Meyda: Invalid feature format\"),\n    invalidInput: new Error(\"Meyda: Invalid input.\"),\n    noAC: new Error(\"Meyda: No AudioContext specified.\"),\n    noSource: new Error(\"Meyda: No source node specified.\"),\n  },\n\n  /**\n   * @summary\n   * Create a MeydaAnalyzer\n   *\n   * A factory function for creating a MeydaAnalyzer, the interface for using\n   * Meyda in the context of Web Audio.\n   *\n   * ```javascript\n   * const analyzer = Meyda.createMeydaAnalyzer({\n   *   \"audioContext\": audioContext,\n   *   \"source\": source,\n   *   \"bufferSize\": 512,\n   *   \"featureExtractors\": [\"rms\"],\n   *   \"inputs\": 2,\n   *   \"callback\": features => {\n   *     levelRangeElement.value = features.rms;\n   *   }\n   * });\n   * ```\n   */\n  createMeydaAnalyzer,\n  /**\n   * List available audio feature extractors. Return format provides the key to\n   * be used in selecting the extractor in the extract methods\n   */\n  listAvailableFeatureExtractors,\n  /**\n   * Extract an audio feature from a buffer\n   *\n   * Unless `meyda.windowingFunction` is set otherwise, `extract` will\n   * internally apply a hanning window to the buffer prior to conversion into\n   * the frequency domain.\n   *\n   * ```javascript\n   * meyda.bufferSize = 2048;\n   * const features = meyda.extract(['zcr', 'spectralCentroid'], signal);\n   * ```\n   */\n  extract: function (feature, signal, previousSignal) {\n    if (!signal) throw this._errors.invalidInput;\n    else if (typeof signal != \"object\") throw this._errors.invalidInput;\n    else if (!feature) throw this._errors.featureUndef;\n    else if (!utilities.isPowerOfTwo(signal.length)) throw this._errors.notPow2;\n\n    if (\n      typeof this.barkScale == \"undefined\" ||\n      this.barkScale.length != this.bufferSize\n    ) {\n      this.barkScale = utilities.createBarkScale(\n        this.bufferSize,\n        this.sampleRate,\n        this.bufferSize\n      );\n    }\n\n    // Recalculate mel bank if buffer length changed\n    if (\n      typeof this.melFilterBank == \"undefined\" ||\n      this.barkScale.length != this.bufferSize ||\n      this.melFilterBank.length != this.melBands\n    ) {\n      this.melFilterBank = utilities.createMelFilterBank(\n        Math.max(this.melBands, this.numberOfMFCCCoefficients),\n        this.sampleRate,\n        this.bufferSize\n      );\n    }\n\n    // Recalculate chroma bank if buffer length changed\n    if (\n      typeof this.chromaFilterBank == \"undefined\" ||\n      this.chromaFilterBank.length != this.chromaBands\n    ) {\n      this.chromaFilterBank = utilities.createChromaFilterBank(\n        this.chromaBands,\n        this.sampleRate,\n        this.bufferSize\n      );\n    }\n\n    if (\"buffer\" in signal && typeof signal.buffer == \"undefined\") {\n      //signal is a normal array, convert to F32A\n      this.signal = utilities.arrayToTyped(signal);\n    } else {\n      this.signal = signal;\n    }\n\n    let preparedSignal = prepareSignalWithSpectrum(\n      signal,\n      this.windowingFunction,\n      this.bufferSize\n    );\n\n    this.signal = preparedSignal.windowedSignal;\n    this.complexSpectrum = preparedSignal.complexSpectrum;\n    this.ampSpectrum = preparedSignal.ampSpectrum;\n\n    if (previousSignal) {\n      let preparedSignal = prepareSignalWithSpectrum(\n        previousSignal,\n        this.windowingFunction,\n        this.bufferSize\n      );\n\n      this.previousSignal = preparedSignal.windowedSignal;\n      this.previousComplexSpectrum = preparedSignal.complexSpectrum;\n      this.previousAmpSpectrum = preparedSignal.ampSpectrum;\n    }\n\n    const extract = (feature) => {\n      return this.featureExtractors[feature]({\n        ampSpectrum: this.ampSpectrum,\n        chromaFilterBank: this.chromaFilterBank,\n        complexSpectrum: this.complexSpectrum,\n        signal: this.signal,\n        bufferSize: this.bufferSize,\n        sampleRate: this.sampleRate,\n        barkScale: this.barkScale,\n        melFilterBank: this.melFilterBank,\n        previousSignal: this.previousSignal,\n        previousAmpSpectrum: this.previousAmpSpectrum,\n        previousComplexSpectrum: this.previousComplexSpectrum,\n        numberOfMFCCCoefficients: this.numberOfMFCCCoefficients,\n        numberOfBarkBands: this.numberOfBarkBands,\n      });\n    };\n\n    if (typeof feature === \"object\") {\n      return feature.reduce(\n        (acc, el) =>\n          Object.assign({}, acc, {\n            [el]: extract(el),\n          }),\n        {}\n      );\n    } else if (typeof feature === \"string\") {\n      return extract(feature);\n    } else {\n      throw this._errors.invalidFeatureFmt;\n    }\n  },\n};\n\nvar prepareSignalWithSpectrum = function (\n  signal,\n  windowingFunction,\n  bufferSize\n) {\n  var preparedSignal: any = {};\n\n  if (typeof signal.buffer == \"undefined\") {\n    //signal is a normal array, convert to F32A\n    preparedSignal.signal = utilities.arrayToTyped(signal);\n  } else {\n    preparedSignal.signal = signal;\n  }\n\n  preparedSignal.windowedSignal = utilities.applyWindow(\n    preparedSignal.signal,\n    windowingFunction\n  );\n\n  preparedSignal.complexSpectrum = fft(preparedSignal.windowedSignal);\n  preparedSignal.ampSpectrum = new Float32Array(bufferSize / 2);\n  for (var i = 0; i < bufferSize / 2; i++) {\n    preparedSignal.ampSpectrum[i] = Math.sqrt(\n      Math.pow(preparedSignal.complexSpectrum.real[i], 2) +\n        Math.pow(preparedSignal.complexSpectrum.imag[i], 2)\n    );\n  }\n\n  return preparedSignal;\n};\n\nexport default Meyda;\n\n/**\n * List available audio feature extractors. Return format provides the key to\n * be used in selecting the extractor in the extract methods\n */\nfunction listAvailableFeatureExtractors(): MeydaAudioFeature[] {\n  return Object.keys(this.featureExtractors) as MeydaAudioFeature[];\n}\n\n/**\n * Create a MeydaAnalyzer\n *\n * A factory function for creating a MeydaAnalyzer, the interface for using\n * Meyda in the context of Web Audio.\n *\n * ```javascript\n * const analyzer = Meyda.createMeydaAnalyzer({\n *   \"audioContext\": audioContext,\n *   \"source\": source,\n *   \"bufferSize\": 512,\n *   \"featureExtractors\": [\"rms\"],\n *   \"inputs\": 2,\n *   \"callback\": features => {\n *     levelRangeElement.value = features.rms;\n *   }\n * });\n * ```\n */\nfunction createMeydaAnalyzer(options) {\n  return new MeydaAnalyzer(options, Object.assign({}, Meyda));\n}\n\n/**\n * Apply a windowing function to a signal\n */\nfunction windowing(\n  signal: MeydaSignal,\n  windowname: MeydaWindowingFunction\n): MeydaSignal {\n  return utilities.applyWindow(signal, windowname);\n}\n\n// @ts-ignore\nif (typeof window !== \"undefined\") window.Meyda = Meyda;\n"
  },
  {
    "path": "src/meyda-wa.ts",
    "content": "import * as utilities from \"./utilities\";\nimport * as featureExtractors from \"./featureExtractors\";\nimport type {\n  MeydaAudioFeature,\n  MeydaWindowingFunction,\n  MeydaFeaturesObject,\n} from \"./main\";\n\n/**\n * MeydaAnalyzerOptions\n */\nexport interface MeydaAnalyzerOptions {\n  /**\n   * The Audio Context for the MeydaAnalyzer to operate in.\n   */\n  audioContext: AudioContext;\n  /**\n   * The Audio Node for Meyda to listen to.\n   */\n  source: AudioNode;\n  /**\n   * The size of the buffer.\n   */\n  bufferSize: number;\n  /**\n   * The number of samples between the start of each buffer.\n   */\n  hopSize?: number | undefined;\n  /**\n   * The number of samples per second in the audioContext.\n   */\n  sampleRate?: number | undefined;\n  /**\n   * Pass `true` to start feature extraction immediately\n   */\n  startImmediately?: boolean | undefined;\n  /**\n   * The channel from the input node to listen to\n   */\n  channel?: number | undefined;\n  /**\n   * The Windowing Function to apply to the signal before transformation to the frequency domain.\n   */\n  windowingFunction?: MeydaWindowingFunction | undefined;\n  /**\n   * What feature extractors to return to the callback.\n   */\n  featureExtractors?:\n    | MeydaAudioFeature\n    | ReadonlyArray<MeydaAudioFeature>\n    | undefined;\n  inputs?: number | undefined;\n  outputs?: number | undefined;\n  /**\n   * The number of mfcc coefficients to calculate for each buffer.\n   */\n  numberOfMFCCCoefficients?: number | undefined;\n  /**\n   * The number of bark bands to calculate for use in feature extractors.\n   */\n  numberOfBarkBands?: number | undefined;\n  /**\n   * The callback to receive your audio features. Will be called once for each buffer of input audio.\n   */\n  callback?: ((features: Partial<MeydaFeaturesObject>) => void) | undefined;\n}\n\n/**\n * Meyda's interface to the Web Audio API. MeydaAnalyzer abstracts an API on\n * top of the Web Audio API's ScriptProcessorNode, running the Meyda audio\n * feature extractors inside that context.\n *\n * MeydaAnalyzer's constructor should not be called directly - MeydaAnalyzer\n * objects should be generated using the {@link createMeydaAnalyzer}\n * factory function in the main Meyda class.\n *\n * Options are of type {@link MeydaAnalyzerOptions}.\n *\n * @example\n * ```javascript\n * const analyzer = Meyda.createMeydaAnalyzer({\n *   \"audioContext\": audioContext,\n *   \"source\": source,\n *   \"bufferSize\": 512,\n *   \"featureExtractors\": [\"rms\"],\n *   \"inputs\": 2,\n *   \"numberOfMFCCCoefficients\": 20\n *   \"callback\": features => {\n *     levelRangeElement.value = features.rms;\n *   }\n * });\n * ```\n */\nexport class MeydaAnalyzer {\n  /** @hidden */\n  _m: any;\n\n  /** @hidden */\n  constructor(options: MeydaAnalyzerOptions, _this) {\n    this._m = _this;\n    if (!options.audioContext) {\n      throw this._m.errors.noAC;\n    } else if (\n      options.bufferSize &&\n      !utilities.isPowerOfTwo(options.bufferSize)\n    ) {\n      throw this._m._errors.notPow2;\n    } else if (!options.source) {\n      throw this._m._errors.noSource;\n    }\n\n    this._m.audioContext = options.audioContext;\n\n    // TODO: validate options\n    this._m.bufferSize = options.bufferSize || this._m.bufferSize || 256;\n    this._m.hopSize = options.hopSize || this._m.hopSize || this._m.bufferSize;\n    this._m.sampleRate =\n      options.sampleRate || this._m.audioContext.sampleRate || 44100;\n    this._m.callback = options.callback;\n    this._m.windowingFunction = options.windowingFunction || \"hanning\";\n    this._m.featureExtractors = featureExtractors;\n    this._m.EXTRACTION_STARTED = options.startImmediately || false;\n    this._m.channel = typeof options.channel === \"number\" ? options.channel : 0;\n    this._m.inputs = options.inputs || 1;\n    this._m.outputs = options.outputs || 1;\n    this._m.numberOfMFCCCoefficients =\n      options.numberOfMFCCCoefficients ||\n      this._m.numberOfMFCCCoefficients ||\n      13;\n    this._m.numberOfBarkBands =\n      options.numberOfBarkBands || this._m.numberOfBarkBands || 24;\n\n    //create nodes\n    this._m.spn = this._m.audioContext.createScriptProcessor(\n      this._m.bufferSize,\n      this._m.inputs,\n      this._m.outputs\n    );\n    this._m.spn.connect(this._m.audioContext.destination);\n\n    this._m._featuresToExtract = options.featureExtractors || [];\n\n    //always recalculate BS and MFB when a new Meyda analyzer is created.\n    this._m.barkScale = utilities.createBarkScale(\n      this._m.bufferSize,\n      this._m.sampleRate,\n      this._m.bufferSize\n    );\n    this._m.melFilterBank = utilities.createMelFilterBank(\n      Math.max(this._m.melBands, this._m.numberOfMFCCCoefficients),\n      this._m.sampleRate,\n      this._m.bufferSize\n    );\n\n    this._m.inputData = null;\n    this._m.previousInputData = null;\n\n    this._m.frame = null;\n    this._m.previousFrame = null;\n\n    this.setSource(options.source);\n\n    this._m.spn.onaudioprocess = (e) => {\n      var buffer;\n      if (this._m.inputData !== null) {\n        this._m.previousInputData = this._m.inputData;\n      }\n\n      this._m.inputData = e.inputBuffer.getChannelData(this._m.channel);\n\n      if (!this._m.previousInputData) {\n        buffer = this._m.inputData;\n      } else {\n        buffer = new Float32Array(\n          this._m.previousInputData.length +\n            this._m.inputData.length -\n            this._m.hopSize\n        );\n        buffer.set(this._m.previousInputData.slice(this._m.hopSize));\n        buffer.set(\n          this._m.inputData,\n          this._m.previousInputData.length - this._m.hopSize\n        );\n      }\n\n      var frames = utilities.frame(buffer, this._m.bufferSize, this._m.hopSize);\n\n      frames.forEach((f) => {\n        this._m.frame = f;\n\n        var features = this._m.extract(\n          this._m._featuresToExtract,\n          this._m.frame,\n          this._m.previousFrame\n        );\n\n        // call callback if applicable\n        if (\n          typeof this._m.callback === \"function\" &&\n          this._m.EXTRACTION_STARTED\n        ) {\n          this._m.callback(features);\n        }\n\n        this._m.previousFrame = this._m.frame;\n      });\n    };\n  }\n\n  /**\n   * Start feature extraction\n   * The audio features will be passed to the callback function that was defined\n   * in the MeydaOptions that were passed to the factory when constructing the\n   * MeydaAnalyzer.\n   * @param {(string|Array.<string>)} [features]\n   * Change the features that Meyda is extracting. Defaults to the features that\n   * were set upon construction in the options parameter.\n   * @example\n   * ```javascript\n   * analyzer.start('chroma');\n   * ```\n   */\n  start(features?: MeydaAudioFeature | ReadonlyArray<MeydaAudioFeature>): void {\n    this._m._featuresToExtract = features || this._m._featuresToExtract;\n    this._m.EXTRACTION_STARTED = true;\n  }\n\n  /**\n   * Stop feature extraction.\n   * @example\n   * ```javascript\n   * analyzer.stop();\n   * ```\n   */\n  stop(): void {\n    this._m.EXTRACTION_STARTED = false;\n  }\n\n  /**\n   * Set the Audio Node for Meyda to listen to.\n   * @param {AudioNode} source - The Audio Node for Meyda to listen to\n   * @example\n   * ```javascript\n   * analyzer.setSource(audioSourceNode);\n   * ```\n   */\n  setSource(source: AudioNode): void {\n    this._m.source && this._m.source.disconnect(this._m.spn);\n    this._m.source = source;\n    this._m.source.connect(this._m.spn);\n  }\n\n  /**\n   * Set the channel of the audio node for Meyda to listen to\n   * @param {number} channel - the index of the channel on the input audio node\n   * for Meyda to listen to.\n   * @example\n   * ```javascript\n   * analyzer.setChannel(0);\n   * ```\n   */\n  setChannel(channel: number) {\n    if (channel <= this._m.inputs) {\n      this._m.channel = channel;\n    } else {\n      console.error(\n        `Channel ${channel} does not exist. Make sure you've provided a value for 'inputs' that is greater than ${channel} when instantiating the MeydaAnalyzer`\n      );\n    }\n  }\n\n  /**\n   * Get a set of features from the current frame.\n   * @param {(string|Array.<string>)} [features]\n   * Change the features that Meyda is extracting\n   * @example\n   * ```javascript\n   * analyzer.get('spectralFlatness');\n   * ```\n   */\n  get(\n    features?: MeydaAudioFeature | ReadonlyArray<MeydaAudioFeature>\n  ): Partial<MeydaFeaturesObject> | null {\n    if (this._m.inputData) {\n      return this._m.extract(\n        features || this._m._featuresToExtract,\n        this._m.inputData,\n        this._m.previousInputData\n      );\n    } else {\n      return null;\n    }\n  }\n}\n"
  },
  {
    "path": "src/utilities.ts",
    "content": "import * as windowing from \"./windowing\";\n\nlet windows = {};\n\nexport function isPowerOfTwo(num) {\n  while (num % 2 === 0 && num > 1) {\n    num /= 2;\n  }\n\n  return num === 1;\n}\n\nexport function error(message) {\n  throw new Error(\"Meyda: \" + message);\n}\n\nexport function pointwiseBufferMult(a, b) {\n  let c: number[] = [];\n  for (let i = 0; i < Math.min(a.length, b.length); i++) {\n    c[i] = a[i] * b[i];\n  }\n\n  return c;\n}\n\nexport function applyWindow(signal, windowname) {\n  if (windowname !== \"rect\") {\n    if (windowname === \"\" || !windowname) windowname = \"hanning\";\n    if (!windows[windowname]) windows[windowname] = {};\n\n    if (!windows[windowname][signal.length]) {\n      try {\n        windows[windowname][signal.length] = windowing[windowname](\n          signal.length\n        );\n      } catch (e) {\n        throw new Error(\"Invalid windowing function\");\n      }\n    }\n\n    signal = pointwiseBufferMult(signal, windows[windowname][signal.length]);\n  }\n\n  return signal;\n}\n\nexport function createBarkScale(length, sampleRate, bufferSize): Float32Array {\n  let barkScale = new Float32Array(length);\n\n  for (var i = 0; i < barkScale.length; i++) {\n    barkScale[i] = (i * sampleRate) / bufferSize;\n    barkScale[i] =\n      13 * Math.atan(barkScale[i] / 1315.8) +\n      3.5 * Math.atan(Math.pow(barkScale[i] / 7518, 2));\n  }\n\n  return barkScale;\n}\n\nexport function typedToArray(t) {\n  // utility to convert typed arrays to normal arrays\n  return Array.prototype.slice.call(t);\n}\n\nexport function arrayToTyped(t) {\n  // utility to convert arrays to typed F32 arrays\n  return Float32Array.from(t);\n}\n\nexport function _normalize(num, range) {\n  return num / range;\n}\n\nexport function normalize(a, range) {\n  return a.map(function (n) {\n    return _normalize(n, range);\n  });\n}\n\nexport function normalizeToOne(a) {\n  var max = Math.max.apply(null, a);\n\n  return a.map(function (n) {\n    return n / max;\n  });\n}\n\nexport function mean(a) {\n  return (\n    a.reduce(function (prev, cur) {\n      return prev + cur;\n    }) / a.length\n  );\n}\n\nfunction _melToFreq(melValue) {\n  var freqValue = 700 * (Math.exp(melValue / 1125) - 1);\n  return freqValue;\n}\n\nfunction _freqToMel(freqValue) {\n  var melValue = 1125 * Math.log(1 + freqValue / 700);\n  return melValue;\n}\n\nexport function melToFreq(mV) {\n  return _melToFreq(mV);\n}\n\nexport function freqToMel(fV) {\n  return _freqToMel(fV);\n}\n\nexport function createMelFilterBank(\n  numFilters: number,\n  sampleRate: number,\n  bufferSize: number\n): number[][] {\n  //the +2 is the upper and lower limits\n  let melValues = new Float32Array(numFilters + 2);\n  let melValuesInFreq = new Float32Array(numFilters + 2);\n\n  //Generate limits in Hz - from 0 to the nyquist.\n  let lowerLimitFreq = 0;\n  let upperLimitFreq = sampleRate / 2;\n\n  //Convert the limits to Mel\n  let lowerLimitMel = _freqToMel(lowerLimitFreq);\n  let upperLimitMel = _freqToMel(upperLimitFreq);\n\n  //Find the range\n  let range = upperLimitMel - lowerLimitMel;\n\n  //Find the range as part of the linear interpolation\n  let valueToAdd = range / (numFilters + 1);\n\n  let fftBinsOfFreq: number[] = new Array(numFilters + 2);\n\n  for (let i = 0; i < melValues.length; i++) {\n    // Initialising the mel frequencies\n    // They're a linear interpolation between the lower and upper limits.\n    melValues[i] = i * valueToAdd;\n\n    // Convert back to Hz\n    melValuesInFreq[i] = _melToFreq(melValues[i]);\n\n    // Find the corresponding bins\n    fftBinsOfFreq[i] = Math.floor(\n      ((bufferSize + 1) * melValuesInFreq[i]) / sampleRate\n    );\n  }\n\n  var filterBank: number[][] = new Array(numFilters);\n  for (let j = 0; j < filterBank.length; j++) {\n    // Create a two dimensional array of size numFilters * (buffersize/2)+1\n    // pre-populating the arrays with 0s.\n    filterBank[j] = new Array(bufferSize / 2 + 1).fill(0);\n\n    //creating the lower and upper slopes for each bin\n    for (let i = fftBinsOfFreq[j]; i < fftBinsOfFreq[j + 1]; i++) {\n      filterBank[j][i] =\n        (i - fftBinsOfFreq[j]) / (fftBinsOfFreq[j + 1] - fftBinsOfFreq[j]);\n    }\n\n    for (let i = fftBinsOfFreq[j + 1]; i < fftBinsOfFreq[j + 2]; i++) {\n      filterBank[j][i] =\n        (fftBinsOfFreq[j + 2] - i) /\n        (fftBinsOfFreq[j + 2] - fftBinsOfFreq[j + 1]);\n    }\n  }\n\n  return filterBank;\n}\n\nexport function hzToOctaves(freq, A440) {\n  return Math.log2((16 * freq) / A440);\n}\n\nexport function normalizeByColumn(a) {\n  var emptyRow = a[0].map(() => 0);\n  var colDenominators = a\n    .reduce((acc, row) => {\n      row.forEach((cell, j) => {\n        acc[j] += Math.pow(cell, 2);\n      });\n      return acc;\n    }, emptyRow)\n    .map(Math.sqrt);\n  return a.map((row, i) => row.map((v, j) => v / (colDenominators[j] || 1)));\n}\n\nexport function createChromaFilterBank(\n  numFilters,\n  sampleRate,\n  bufferSize,\n  centerOctave = 5,\n  octaveWidth = 2,\n  baseC = true,\n  A440 = 440\n) {\n  var numOutputBins = Math.floor(bufferSize / 2) + 1;\n\n  var frequencyBins = new Array(bufferSize)\n    .fill(0)\n    .map(\n      (_, i) => numFilters * hzToOctaves((sampleRate * i) / bufferSize, A440)\n    );\n\n  // Set a value for the 0 Hz bin that is 1.5 octaves below bin 1\n  // (so chroma is 50% rotated from bin 1, and bin width is broad)\n  frequencyBins[0] = frequencyBins[1] - 1.5 * numFilters;\n\n  var binWidthBins = frequencyBins\n    .slice(1)\n    .map((v, i) => Math.max(v - frequencyBins[i]), 1)\n    .concat([1]);\n\n  var halfNumFilters = Math.round(numFilters / 2);\n\n  var filterPeaks = new Array(numFilters)\n    .fill(0)\n    .map((_, i) =>\n      frequencyBins.map(\n        (frq) =>\n          ((10 * numFilters + halfNumFilters + frq - i) % numFilters) -\n          halfNumFilters\n      )\n    );\n\n  var weights = filterPeaks.map((row, i) =>\n    row.map((_, j) =>\n      Math.exp(-0.5 * Math.pow((2 * filterPeaks[i][j]) / binWidthBins[j], 2))\n    )\n  );\n\n  weights = normalizeByColumn(weights);\n\n  if (octaveWidth) {\n    var octaveWeights = frequencyBins.map((v) =>\n      Math.exp(\n        -0.5 * Math.pow((v / numFilters - centerOctave) / octaveWidth, 2)\n      )\n    );\n    weights = weights.map((row) =>\n      row.map((cell, j) => cell * octaveWeights[j])\n    );\n  }\n\n  if (baseC) {\n    weights = [...weights.slice(3), ...weights.slice(0, 3)];\n  }\n\n  return weights.map((row) => row.slice(0, numOutputBins));\n}\n\nexport function frame(buffer, frameLength, hopLength) {\n  if (buffer.length < frameLength) {\n    throw new Error(\"Buffer is too short for frame length\");\n  }\n  if (hopLength < 1) {\n    throw new Error(\"Hop length cannot be less that 1\");\n  }\n  if (frameLength < 1) {\n    throw new Error(\"Frame length cannot be less that 1\");\n  }\n\n  const numFrames = 1 + Math.floor((buffer.length - frameLength) / hopLength);\n\n  return new Array(numFrames)\n    .fill(0)\n    .map((_, i) => buffer.slice(i * hopLength, i * hopLength + frameLength));\n}\n"
  },
  {
    "path": "src/windowing.ts",
    "content": "export function blackman(size) {\n  let blackmanBuffer = new Float32Array(size);\n  let coeff1 = (2 * Math.PI) / (size - 1);\n  let coeff2 = 2 * coeff1;\n\n  //According to http://uk.mathworks.com/help/signal/ref/blackman.html\n  //first half of the window\n  for (let i = 0; i < size / 2; i++) {\n    blackmanBuffer[i] =\n      0.42 - 0.5 * Math.cos(i * coeff1) + 0.08 * Math.cos(i * coeff2);\n  }\n\n  //second half of the window\n  for (let i = Math.ceil(size / 2); i > 0; i--) {\n    blackmanBuffer[size - i] = blackmanBuffer[i - 1];\n  }\n\n  return blackmanBuffer;\n}\n\nexport function sine(size) {\n  let coeff = Math.PI / (size - 1);\n  let sineBuffer = new Float32Array(size);\n\n  for (let i = 0; i < size; i++) {\n    sineBuffer[i] = Math.sin(coeff * i);\n  }\n\n  return sineBuffer;\n}\n\nexport function hanning(size) {\n  let hanningBuffer = new Float32Array(size);\n  for (let i = 0; i < size; i++) {\n    // According to the R documentation\n    // http://ugrad.stat.ubc.ca/R/library/e1071/html/hanning.window.html\n    hanningBuffer[i] = 0.5 - 0.5 * Math.cos((2 * Math.PI * i) / (size - 1));\n  }\n\n  return hanningBuffer;\n}\n\nexport function hamming(size) {\n  let hammingBuffer = new Float32Array(size);\n  for (let i = 0; i < size; i++) {\n    //According to http://uk.mathworks.com/help/signal/ref/hamming.html\n    hammingBuffer[i] = 0.54 - 0.46 * Math.cos(2 * Math.PI * (i / size - 1));\n  }\n\n  return hammingBuffer;\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"exclude\": [\"./dist\", \"./docs\", \"./__tests__\", \"rollup.config.mjs\", \"./bin\"],\n  \"compilerOptions\": {\n    \"outDir\": \"./dist/esm\",\n    \"declaration\": true,\n    \"allowJs\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"importHelpers\": true,\n    \"moduleResolution\": \"node\",\n    \"forceConsistentCasingInFileNames\": true,\n    \"alwaysStrict\": true,\n    \"strictNullChecks\": true,\n    \"strictBindCallApply\": true,\n    \"strictFunctionTypes\": true,\n    \"strictPropertyInitialization\": true,\n    \"noImplicitAny\": false,\n    \"noImplicitThis\": false,\n    \"rootDir\": \"./src\",\n    \"module\": \"esnext\"\n  },\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"display\": \"Recommended\"\n}\n"
  }
]